Action
对象),并允许轻松删除、定制或共享操作。此外,它们使更改操作绑定的键变得容易。 Actions
的另一个优点是它们具有启用状态,这提供了一种轻松禁用操作而无需跟踪其附加到哪个组件的简便方式。
正如@Robin所指出的那样, 文本组件也有DocumentListener
和DocumentFilter
,可添加更适合文本文档的功能。请参见Text Component Features以获取有关文档监听器和过滤器的更多信息。
优点
可设置和共享
专用于简单的快捷键,没有不需要的副作用(大多数事件都非常简单且可设置)
舒适地解决窗口焦点的任何问题(也可以进行设置,在Java中窗口必须在屏幕上获得焦点)
Swing内部使用KeyBindings、内置快捷键、操作,在Key Bindings by @camickr中实现更多有趣的快捷键和操作
输出应该是Swing Action(在Swing中是同样高度的抽象)
缺点
无法覆盖所有键盘键位
不能同时覆盖三个或更多键被按下的情况
代码看起来非常复杂(实际上并不是真的,在大多数情况下,代码比KeyListener中的相同代码更短)
为了获取更多详细信息,请参见@camickr的评论(需要Swing计时器进行重复操作)
无法使用一个在API中实现的方法进行consume()
.
按键监听器(低级别监听器)
优点
非常易于使用,直观
对于一个或两个键事件,代码非常简短
不需要任何关于Swing和Java的知识
可以覆盖三个或更多键被按下的情况(例如:非常复杂的快捷键),然后无论哪个键触发任何事件,都没有关系,它们是独立的按键事件
可以通过编程方式使用event.consume()
可以监听Compound JComponents(例如JComboBox、JSpinner等)的非最终化、内部事件
缺点:
无法访问某些容器和JComponents
(J)Component必须是焦点所有者并且必须可以获得焦点
不适用于Swing JComponents
.
AWTEventListener
将所有键盘和鼠标事件组合在一起,尽可能低级别地监听Java中的事件
基本上,在基于Swing的大多数GUI中甚至是非常复杂的GUI中,没有理由使用此侦听器
我看到这个侦听器在基于AWT的自定义组件中实现,需要来自本机操作系统的peers
但是,有一个出色的AWTEventListener实现 Application Inactivity and Global Event Listeners by @camickr
.
注意:键盘事件的排序因平台而异
DocumentListener
、DocumentFilter
”的段落。许多关于KeyListener
的SO问题都与文本组件有关。 - Robin