mik*_*era 10 java swing key-events keylistener key-bindings
我注意到在Java/Swing中,似乎至少有两种不同的方法来处理关键事件:
每个人的优点/缺点是什么,何时你更喜欢一个而不是另一个?
And*_*son 21
什么时候你应该更喜欢一个而不是另一个?
因为它们被引入所以更喜欢Key Bindings.A KeyListener是与事件的较低级别连接.
关键绑定的页面涵盖了我倾向于使用它们而不是使用它们的很多原因KeyListener.它列出了许多简单地"不可用"的东西KeyListener.EG选择:
WHEN_FOCUSEDWHEN_ANCESTOR_OF_FOCUSED_COMPONENT WHEN_IN_FOCUSED_WINDOW我阅读链接文档越多,我就越不能理解提出问题的必要性.例如:
键绑定的替代方法是使用键侦听器.键侦听器可以作为键盘输入的低级接口,但是对于单个键的响应,键绑定更合适,并且更容易维护代码.如果在组件没有焦点时要激活键绑定,则键侦听器也很困难.密钥绑定的一些优点是它们有点自我记录,考虑包含层次结构,鼓励可重用的代码块(
Action对象),并允许轻松删除,自定义或共享操作.此外,它们可以轻松更改操作绑定的键.另一个优点Actions是它们具有启用状态,该状态提供了一种简单的方法来禁用操作,而无需跟踪它所连接的组件.
正如@Robin所指出的,文本组件也具有DocumentListener&DocumentFilter可以添加到更适合文本文档的功能.有关文档侦听器和过滤器的更多信息,请参阅文本组件功能.
mKo*_*bel 12
好处
可设定,可分享,
指定为简单的快捷方式,没有不必要的副作用(大多数事件非常简单和可设置)
用窗口中的焦点来解决任何问题(也可以设置,在Java中肯定窗口必须关注屏幕)
在内部进行Swing以使用KeyBindings,built_in快捷方式,操作,更多在@camickr的键绑定中(在Swing中实现有趣的快捷方式和操作)
输出应该是Swing Action(Swing中同样高的抽象)
缺点
无法覆盖键盘上的所有键
不可能同时按下三个或更多键
代码看起来非常复杂(根本不是真的,代码在大多数情况下是与KeyListener中的相同代码进行比较的分类器)
删除更多详细信息以查看@camickr(需要Swing Timer重复操作)
不可能使用API中实现的一个方法来使用()
.
KeyListeners(低级侦听器)
好处
非常容易使用,直观
对于一个两个关键事件,代码非常短
不需要任何关于Swing,Java的知识
可以覆盖树或按下更多的键(例如),对于非常复杂的按键切换,那么哪个可以触发任何单独的键事件无关紧要
有可能以编程方式发送到event.consume()
可以从Compound JComponents(JComboBox,JSpinner ...)中侦听非最终的内部事件
缺点
部分容器和JComponents无法访问
(J)组件应该是焦点所有者,并且必须是可聚焦的
未指定用于Swing JComponents
.
AWTEventListener所
组合所有Key和Mouse事件,Java中可能的低级侦听器
基本上没有理由在大多数(甚至是非常复杂的)基于Swing的GUI上使用这个监听器
我看到这个监听器是在基于AWT的自定义组件中实现的,所需的对等端来自本机操作系统
但@camickr为AWTEventListener 应用程序不活动和全局事件监听器提供了优秀的实现
.
注意:Key事件的排序是平台不同的平台
| 归档时间: |
|
| 查看次数: |
7103 次 |
| 最近记录: |