KeyListener已添加到名为_window的JFrame中。每当按下某个键时,它都会打印我用来测试的行,但不会打印特定的键,例如VK_A。谁能告诉我为什么?我的第一个想法是它不能聚焦,但是如果是这种情况,KeyLis根本无法打印,对吗?
public class Gui implements Runnable {
public Gui() { }
private JFrame _window;
@Override
public void run() {
_window = new JFrame("Window");
...
_window.addKeyListener(new KeyLis());
}
class KeyLis implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
System.out.println("A key has been typed!");
if(e.getKeyCode() == KeyEvent.VK_A){
System.out.print("A! ");
}
...
}
在此代码中,“ A!”将不会打印,但“已键入密钥!”将。为什么?
最佳答案
KeyEvent
的docs的摘录:
public int getKeyCode()
Returns the integer keyCode associated with the key in this event.
Returns:
the integer code for an actual key on the keyboard. (For KEY_TYPED events, the keyCode is VK_UNDEFINED.)
您案件的重要部分是
对于
KEY_TYPED
事件,keyCode为VK_UNDEFINED
如果要坚持使用
getKeyChar()
方法,请使用keyTyped
,或者将相应的代码移到keyReleased
或keyPressed
方法中。(或者更好的是使用Key Bindings)