爲什麼keyTyped將不同的KeyEvent返回keyPressed/keyReleased?Java Swing keyEvent vs keyPressed/keyReleased - 不同的密鑰代碼?
package poke;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class PokeEvents implements KeyListener {
static public void main(String args[]) {
new PokeEvents();
}
public PokeEvents() {
JFrame frame = new JFrame();
frame.addKeyListener(this);
frame.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
System.err.println("keyTyped: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode());
}
@Override
public void keyPressed(KeyEvent e) {
System.err.println("keyPressed: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
System.err.println("keyReleased: "+e.getKeyCode()+", "+e.getKeyChar()+", "+e.getExtendedKeyCode());
}
}
運行它,按 'A' 在鍵盤上,輸出爲:
keyPressed: 65, a, 65
keyTyped: 0, a, 0
keyReleased: 65, a, 65
OK,似乎很無害的,你說。讓我們去賭注。嘗試將它與Ctrl相結合(我們軟件中的原始錯誤揭示了這是與Ctrl鍵組合相關的)。
keyPressed: 17, , 17
keyPressed: 65, , 65
keyTyped: 0, , 0
keyReleased: 65, , 65
keyReleased: 17, , 17
只是要注意:17 - 控制,65 - a。
在keyTyped
是沒有辦法知道的字符是什麼。它似乎是一個null
種類的字符。
由於字符沒有在瀏覽器中呈現,在這裏它是按照編輯器並在Eclipse:
這不符合原始問題的答案。爲什麼鍵碼不同,即使是基本的'a'字符? –
沒有不同的鍵碼。鍵碼是65,這是「A」鍵的鍵碼。性格不同。正如它應該。如果按住Ctrl並按下A,則會出現Ctrl + A字符。 –
「有和沒有Ctrl,由」A「鍵生成的鍵碼是65.」 顯然不是真的。你見過輸出嗎? –