1

我在弄清楚如何在按键被按下时得到正确通知时遇到了问题。keyPressed在处理多个键时,似乎不会再次为按下的第一个键调用该方法。

示例:如果我按下右箭头键并按住它,它会被重复调用(继续打印测试)。但是,如果我按右箭头键,然后按一次空格键,同时按住右箭头键,只要松开空格键,keyPressed()似乎就不会调用该方法。(没有打印)。

这就是我的代码的样子:

public void keyPressed(KeyEvent e) {

    System.out.println("test");

    switch (e.getKeyCode()) {

        case KeyEvent.VK_LEFT:
            guy.moveLeft();
            break;

        case KeyEvent.VK_RIGHT:
            guy.moveRight();
            break;

        case KeyEvent.VK_SPACE:
            guy.jump();
            break;
    }
}
4

1 回答 1

3

欢迎来到键盘焦点的美妙世界。

假设您已将 a 附加KeyListener到组件...

为了让任何组件接收按键事件,它必须是可聚焦的并且具有键盘焦点。当您想将它用于游戏之类的东西时,这使得它非常不稳定。

相反,您应该利用键绑定 API。除了使编写关键操作更容易之外,它还允许您指定应在哪些焦点条件下触发各个事件。

于 2013-02-21T03:57:08.127 回答