【问题标题】:Java key eventsJava 关键事件
【发布时间】:2013-02-06 07:14:13
【问题描述】:

我在弄清楚如何在按键被按下时得到正确通知时遇到了问题。 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;
    }
}

【问题讨论】:

    标签: java swing awt keylistener keyevent


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,那我看看键绑定。
    • 我做了一些键绑定,但它的行为与以前完全一样。如果按下了多个键,则焦点不会返回到释放最近一个键后仍在按下的上一个键。
    • 不要监听重复按键事件,而是放入一个标志或使用计时器并监控按键释放、重置标志或停止计时器。我建议使用类似javax.siwng.Timer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多