-->

键绑定与Java中的关键听众(Key bindings vs. key listeners in J

2019-07-21 05:04发布

我注意到,在的Java / Swing的存在似乎是处理关键事件至少两种不同的方式:

  • 键绑定
  • 按键侦听

各有什么优势/劣势,当你应该更喜欢一个而不是其他?

Answer 1:

当你应该更喜欢一个而不是其他?

身高键绑定,因为他们进行了介绍。 一个KeyListener是事件的一个较低的水平连接。

在该页面键绑定涵盖了很多的我会倾向于使用它们,而不是原因KeyListener 。 它列出了很多事情,只须“不可用”到KeyListener 。 EG的选择:

  • WHEN_FOCUSED
  • WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
  • WHEN_IN_FOCUSED_WINDOW

我读了链接的文档越多,少我可以理解,需要问的问题。 例如:

对键绑定的方法是使用按键侦听。 主要听众都有自己的位置作为一个低层次的接口的键盘输入,但是对于应对单个按键的键绑定是比较合适的,并往往会导致代码更容易维护。 主要听众也是困难的,如果键绑定功能处于活动状态时,该组件没有焦点。 一些键绑定的优点是他们是有点自我记录,采取包容层次考虑,鼓励可重用代码块( Action对象),并允许行动容易去除,定制,或共享。 此外,他们可以很容易地改变这一个动作所绑定的关键。 的另一个优点Actions是它们具有使能状态,其提供一种简单的方法来禁用动作,而无需跟踪哪些组件它连接到。

文本组件

正如@Robin指出,文本的组件也拥有DocumentListenerDocumentFilter可为功能更适合文本文档添加。 见文本组件功能有关文档的详细信息的听众和过滤器 。



Answer 2:

  1. 键绑定(高抽象)

好处

  • 可设置的,可共享的,

  • 指定简单快捷,无需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

通知:关键事件的排序是不同的平台平台




文章来源: Key bindings vs. key listeners in Java