窗口未聚焦时,Java输入停止工作

时间:2013-07-01 03:05:44

标签: java

今天我用我KeyListener的方式按照我总是这样的方式为我的游戏添加了键盘输入,但出于某种原因,在我的程序中,只要我在窗口外单击并再次单击,键输入就会停止工作。以下是我在keyPressedkeyReleased方法中的内容:

public void keyPressed(KeyEvent e) {

    int code = e.getKeyCode();

    switch (code) {
    case KeyEvent.VK_W:
        keys[0] = true;
        break;
    case KeyEvent.VK_D:
        keys[1] = true;
        break;
    case KeyEvent.VK_S:
        keys[2] = true;
        break;
    case KeyEvent.VK_A:
        keys[3] = true;
        break;
    }
}

public void keyReleased(KeyEvent e) {

    int code = e.getKeyCode();

    switch (code) {
    case KeyEvent.VK_W:
        keys[0] = false;
        break;
    case KeyEvent.VK_D:
        keys[1] = false;
        break;
    case KeyEvent.VK_S:
        keys[2] = false;
        break;
    case KeyEvent.VK_A:
        keys[3] = false;
        break;
    }
}

2 个答案:

答案 0 :(得分:3)

KeyListener因焦点问题而臭名昭着。为了使KeyListener引发一个事件,它注册的组件不仅必须是可聚焦的,而且必须具有焦点。

相反,您应该使用具有克服这些缺点的机制的Key Bindings

<强>修订

如果您正在使用AWT组件,则会遇到另外(少数)问题。实际上,当用户点击调用requestFocusInWindow

时,您需要使组件可以聚焦

答案 1 :(得分:1)

看起来您可能正在尝试使用键盘进行组件动画。请参阅Motion With the Keyboard,其中介绍了使用KeyListener时遇到的一些问题,并说明了如何使用Key Bindings。