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!”将不会打印,但“已键入密钥!”将。为什么?

最佳答案

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


您案件的重要部分是


  对于KEY_TYPED事件,keyCode为VK_UNDEFINED




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

(或者更好的是使用Key Bindings

10-06 08:59