KeyListener 有效,但不会区分特定键

KeyListener works, but won't distinguish specific keys

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! " 不会打印,但 "A key has been typed!" 会。为什么?

来自 KeyEventdocs 的片段:

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.)

您案例中的重要部分是

For KEY_TYPED events, the keyCode is VK_UNDEFINED


如果您想坚持使用 keyTyped 方法,请使用 getKeyChar(),或者将相应的代码移动到 keyReleasedkeyPressed 方法中。

(或者,更好的是,使用 Key Bindings