KeyListener 多久检查一次键盘输入? (Java 图形用户界面)

Posted

技术标签:

【中文标题】KeyListener 多久检查一次键盘输入? (Java 图形用户界面)【英文标题】:How often does KeyListener check keyboard input? (Java GUI) 【发布时间】:2017-10-12 09:13:00 【问题描述】:

我正在编写一个程序,其功能包括检查用户输入是否是箭头键之一并相应地移动屏幕上的精灵。

我将 KeyListener 接口用于我称为 ArrowListener 的内部类。目前,我在 keyPressed() 中有代码可以在屏幕上移动精灵。

我想知道我的 ArrowListener 类多久检查一次键盘输入,因为我在更大的组件类中有另一个方法,它每 100 毫秒调用一次 repaint()。如果 KeyListener 类检查用户输入的频率或多或少,我也会更改重绘频率。

编辑:

我意识到 KeyListener 不会定期检查/轮询键盘的输入,而是处理来自键盘的中断。不过,如果我按住键盘上的某个键 5 秒,KeyListener 会处理多少次中断?

【问题讨论】:

这是操作系统的工作方式,第一次按键和第二次按键之间的延迟总是延迟,其他按键事件的延迟较小,您无法改变这种方式工作 - 但是,不是监视键状态,而是设置一个标志(或一系列标志)来指示哪些键当前处于活动状态。在您的情况下,我可能很想使用某种Stack 并向其添加“按下”和“释放”操作,然后在您的循环中,您可以弹出任意数量的操作并以您的任何方式处理它们想要 - 但有十分之一秒,不确定是否值得 它不轮询。它接收事件。 【参考方案1】:

看来我弄错了;你要找的是KeyBindings;这些允许您在按下某个键时只执行一次ActionListener

【讨论】:

我明白了,所以 KeyListener 接受中断而不是轮询键盘。不过,当我按下向上箭头键并按住 5 秒钟时,会发生多少次中断? 我明白你的意思,但我在我的程序上尝试了这个(即按住向上箭头键五秒钟)并且精灵移动了不止一次。它一直向上移动,直到我松开向上箭头键。 如果您只想在按下一次按钮时处理一个操作,我已经用您应该使用的内容而不是 KeyListener 编辑了我的帖子。

以上是关于KeyListener 多久检查一次键盘输入? (Java 图形用户界面)的主要内容,如果未能解决你的问题,请参考以下文章

改进我的键盘输入 (KeyListener) Java

Java KeyListener 口吃

键盘事件KeyListener( )

键盘事件KeyListener

Java 键盘事件监听KeyListener

Java KeyListener 与键绑定