【问题标题】:How to stop repeated keyPressed() / keyReleased() events in Swing如何在 Swing 中停止重复的 keyPressed() / keyReleased() 事件
【发布时间】:2013-05-13 13:19:59
【问题描述】:

所以我遇到的问题似乎是仅在 Linux 上出现的错误。我试图在按下某个键时记录我的摇摆应用程序,然后检测该键何时释放。现在这不应该成为问题,因为 KeyListener 应该为我处理这个问题。

问题是当我按住按键时,我会收到很多重复的 keyPressed()/keyReleased() 事件,而不仅仅是单个 keypressed()。有没有人知道什么时候在 linux 上真正释放密钥的解决方案或解决方法?

谢谢。

【问题讨论】:

    标签: java linux swing event-handling keyboard-events


    【解决方案1】:

    所以我遇到的问题 似乎是只发生的错误 在 Linux 上

    是的,这是一个 Linux 问题。

    在 Windows 上,当按住某个键时,您会收到多个 KeyPressed 事件,但只有一个 KeyReleased 事件。

    这个问题经常被问到,我从来没有见过一个好的解决方案。

    但我认为解决方案的基础是使用计时器。按下该键时,您将启动计时器。当你得到另一个 keyPressed 时,你重新启动 Timer。所以只要定时器间隔大于键盘的重复率,当一个键被按住时定时器就会不断地复位。当 keyPresses 停止生成时,Timer 将触发,因此您假设密钥已被释放。这意味着您在处理 keyReleased 时会有延迟。

    【讨论】:

    • 如何在Java中获得“键盘的重复率”?这是一个操作系统用户偏好设置,对吧?
    【解决方案2】:

    这是来自 Sun 的错误(包括示例解决方法):http://bugs.sun.com/view_bug.do?bug_id=4153069

    【讨论】:

      【解决方案3】:

      这个问题重复了here

      Here's a hack 实现为可在应用程序启动时安装的 AWTEventListener。

      【讨论】:

        【解决方案4】:

        你可以找到一个很好的解决方法here

        【讨论】:

        【解决方案5】:

        使用 KeyEventDispatcher 实现,您将正确地进行键绑定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-13
          • 2014-03-05
          • 2018-06-24
          • 2018-09-02
          • 2010-11-07
          • 2011-07-04
          • 2012-12-11
          相关资源
          最近更新 更多