当前位置: 首页 > 面试题库 >

如何停止Swing中重复的keyPressed()/ keyReleased()事件

陶永望
2023-03-14
问题内容

因此,我遇到的问题似乎是仅在Linux上发生的错误。我正在尝试在按下某个键时记录我的swing应用程序,然后检测该键何时被释放。现在不应该有问题,因为KeyListener应该可以为我处理这个问题。

问题是,当我按下键时,会得到很多重复的keyPressed()/
keyReleased()事件,而不仅仅是单个keypressed()事件。有谁知道在Linux上何时真正发布密钥的解决方案或解决方法?

谢谢。


问题答案:

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

是的,这是Linux问题。

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

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

但是我认为解决方案的基础是使用计时器。按下键后,将启动计时器。当您再次按下另一个键时,将重新启动计时器。因此,只要计时器间隔大于键盘的重复频率,就可以在按住键时不断重置计时器。当keyPresses停止生成时,计时器将触发,因此您假设已释放键。这意味着您在处理keyReleased时会有延迟。



 类似资料:
  • 问题内容: 在通过单击发送按钮或在一段代码的消息文本字段中按Enter的方法中,我有以下代码。 最后的代码使文本区域空白。但是,通过按Enter键发送消息后,文本框将包含换行符,而不是为空。 我的猜测是,在事件处理程序运行之后,然后添加了换行符。如何停止添加换行符? 问题答案: 致电后尝试添加

  • 问题内容: 我正在使用nodejs和mongoose —尝试在嵌套有递归函数和foreach的深层注释中找到特定的注释。有没有一种方法可以停止nodejs forEach?据我了解,每个forEach迭代都是一个函数,并且我不能只执行“ break”,而只能执行“ return”,但这不会停止foreach。 问题答案: 您无法打破。不过,我可以想到三种伪造方法。 1.The Ugly Way :

  • 问题内容: 是否有一种内置的方法来阻止事件进入作用域链? 由事件传递的事件对象没有方法(如$ rootScope上 的文档所述。)但是,此合并的pull请求表明事件可以对其进行调用。 问题答案: 来自angularJS 1.1.2源代码的片段: 如您所见,$ broadcast中的事件对象没有“ stopPropagation”。 可以使用preventDefault代替stopPropagati

  • 问题内容: 我有一个复选框,希望对click事件执行一些Ajax操作,但是该复选框也位于容器内,它具有自己的单击行为,当单击该复选框时,我不想运行该行为。此示例说明了我要执行的操作: 但是,我不知道如何在不导致默认点击行为(复选框变为选中/未选中)的情况下停止事件冒泡。 以下两项都停止了事件冒泡,但也没有更改复选框状态: 问题答案: 更换 与 event.stopPropagation() 停止将

  • 如果同一个在几个线程之间共享,我可以理解这一点,但否则,我就不明白了。 这个邮件列表线程表明会更安全,但我不清楚为什么。 更确切地说,我不明白那两段话:

  • 问题内容: 我刚刚创建了一个Java井字游戏,我想弄清楚在特定条件下按下Enter键后如何运行方法,下面是一个示例… 问题答案: 根据要在何处捕获“ enter”键,可以使用(在诸如文本组件或按钮之类的组件上)或将键绑定附加到组件上 这将取决于所关注的组件。