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! "不打印,但"已键入一个键!"将。为什么呢?
答案 0 :(得分:3)
来自KeyEvent
的{{3}}的摘要:
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
如果您想坚持keyTyped
方法或将相应的代码移到keyReleased
或keyPressed
方法,请使用docs。
(或者,更好的是,使用getKeyChar()
)