KeyListener可以工作,但不会区分特定键

时间:2015-11-16 16:49:22

标签: java swing keylistener keycode

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! "不打印,但"已键入一个键!"将。为什么呢?

1 个答案:

答案 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方法或将相应的代码移到keyReleasedkeyPressed方法,请使用docs

(或者,更好的是,使用getKeyChar()