我注意到,在的Java / Swing的存在似乎是处理关键事件至少两种不同的方式:
- 键绑定
- 按键侦听
各有什么优势/劣势,当你应该更喜欢一个而不是其他?
我注意到,在的Java / Swing的存在似乎是处理关键事件至少两种不同的方式:
各有什么优势/劣势,当你应该更喜欢一个而不是其他?
当你应该更喜欢一个而不是其他?
身高键绑定,因为他们进行了介绍。 一个KeyListener
是事件的一个较低的水平连接。
在该页面键绑定涵盖了很多的我会倾向于使用它们,而不是原因KeyListener
。 它列出了很多事情,只须“不可用”到KeyListener
。 EG的选择:
WHEN_FOCUSED
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
WHEN_IN_FOCUSED_WINDOW
我读了链接的文档越多,少我可以理解,需要问的问题。 例如:
对键绑定的方法是使用按键侦听。 主要听众都有自己的位置作为一个低层次的接口的键盘输入,但是对于应对单个按键的键绑定是比较合适的,并往往会导致代码更容易维护。 主要听众也是困难的,如果键绑定功能处于活动状态时,该组件没有焦点。 一些键绑定的优点是他们是有点自我记录,采取包容层次考虑,鼓励可重用代码块(
Action
对象),并允许行动容易去除,定制,或共享。 此外,他们可以很容易地改变这一个动作所绑定的关键。 的另一个优点Actions
是它们具有使能状态,其提供一种简单的方法来禁用动作,而无需跟踪哪些组件它连接到。
正如@Robin指出,文本的组件也拥有DocumentListener
及DocumentFilter
可为功能更适合文本文档添加。 见文本组件功能有关文档的详细信息的听众和过滤器 。
好处
可设置的,可共享的,
指定简单快捷,无需un_wanted副作用(其中大多数事件都相当简单,可设置)
confortly解决任何问题与重点窗口(可设定也一样,肯定在Java中的窗口必须具有焦点在屏幕上)
内部Swing中使用键绑定,BUILT_IN快捷方式,动作,更多的由@camickr键绑定 (Swing中实现有趣的快捷方式和行为)
输出应该在摆动动作(同样高的可能在Swing抽象)
缺点
不可能覆盖从键盘的所有键
不可能覆盖三个或更多按键的同时按下
代码看起来非常复杂的(不是真的,代码是分拣机在大多数情况下,从KeyListener的相同的代码比较)
有关详细信息,除去看到@camickr commnent(重复动作所需的摇摆定时器)
不可能消耗()与API实现的一个方法
。
KeyListeners(低电平听者)
好处
使用非常方便,直观
码是一个两个关键事件很短
不需要左右摇摆,Java的任何知识
可以覆盖树或多个键被按下(EG),非常复杂keyshortcuts,那么就无所谓哪一个可以任意开火,独立的关键事件
能够以编程到event.consume()
可以监听来自复合JComponents non_finalized,内部事件(JComboBox中,JSpinner的...)
缺点
没有入店容器和JComponents的一部分
(J)成分应是焦点所有者,并且必须是可聚焦的
未指定为Swing JComponents
。
AWTEventListener所
所有按键和鼠标事件,低水平听众的结合在Java中是可能的
基本上没有理由使用监听器的大部分(即使是很复杂)界面基于Swing
我看到这个监听器基于AWT需要同行定制成品的配件来实现从本地OS来
但也有AWTEventListener所外观极好的实现应用程序活动和全球事件监听器通过@camickr
。
通知:关键事件的排序是不同的平台平台