2013-03-18 82 views
0

我发现在任何使用Key Listener的类中实现的方法都包含keyPressed,keyReleased和keyDown,但是如何在按住键的同时继续发生某些事情?意思是否有实现“keyHeld”类型场景的方法?Java Swing中的键盘“保持”事件?

+0

你的意思是'keyTyped'?而不是'keyDown'。 – Mordechai 2013-03-18 21:52:44

+0

尝试将System.out.println()添加到所有KeyEvent中,查看发生了什么,以便更快地发布[SSCCE](http://sscce.org/),更简单,可运行,可编译,只需使用JFrame一个Focusable JComponents,对KeyEvent作出反应 – mKorbel 2013-03-18 21:53:28

回答

1

有两种一般机制。

keyPressed将在密钥被按下时反复调用,直到密钥被释放。然而,第一次按键和重复键之间通常会有短暂的延迟。

或者,您可以设置一个标志,指示它们的键在被释放时被按下并重置标志。

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

这使我的警告,不进行交互或其他任何线程改变任何UI组件,则此事件调度线程

1

keyTyped方法,被不断要求,同时该键一次,最初的延迟:

s.....ssssssssssssssssssssssssss 
2

请勿使用KeyListener。 Swing旨在与Key Bindings一起使用。

我对这种情况使用了摆动计时器,因为您现在完全控制重复速率。您使用keyPressed绑定启动Timer,然后使用keyReleased绑定停止Timer。 Swing教程还有一章关于如何使用计时器。