Java Swing中的键盘“Held”事件?

时间:2013-03-18 21:49:17

标签: java swing keylistener

我发现在任何使用Key Listeners的类中实现的方法包括keyPressed,keyReleased和keyDown,但是如何在按键保持按下时连续发生某些事情呢?意思是有没有办法实现“keyHeld”类型的场景?

3 个答案:

答案 0 :(得分:2)

不要使用KeyListener。 Swing旨在与Key Bindings一起使用。

我已经在这种情况下使用了Swing Timer,因为您现在可以完全控制重复率。使用keyPressed绑定启动Timer并使用keyReleased绑定停止Timer。 Swing教程还有一个关于如何使用计时器的部分。

答案 1 :(得分:1)

有两种一般机制。

按住键时将重复调用

keyPressed,直到键被释放。但是,第一次按键和重复键之间通常会有短暂的延迟。

或者,你可以设置一个标志,指示他们按下了键,并在释放时重置标志。

对此最简单的解决方案可能是使用某种List包含al,即当前按下的虚拟键码。然后,您只需要检查此列表,看它是否包含您需要使用的虚拟密钥代码,并在其执行时采取适当的操作。

这引出了警告,不要在事件调度线程之外的任何线程中交互或更改任何UI组件

答案 2 :(得分:1)

keyTyped方法在密钥关闭时连续调用,具有初始延迟:

s.....ssssssssssssssssssssssssss