比较KeyListeners和Key Bindings之间的功能

时间:2011-12-29 05:16:54

标签: java swing key-bindings keylistener

这个问题出现时,一位匿名用户对我的答案进行了低估,涉及KeyListeners并建议使用Key Bindings。这位匿名用户告诉我,KeyListener接口是一个旧的AWT解决方案,不应该使用。

但是,我不知道我是否应该完全信任这些信息。我已经在各种网站上进行了研究,包括oracle,并且没有发现任何关于KeyListeners或Key Bindings的功能。我知道这两个人执行类似的任务这一事实,但我不确定“幕后”到底发生了什么,可以这么说。

我倾向于在未来的项目中使用Key Bindings,因为我获得的研究表明KeyListener接口要求相关组件具有焦点而Key Bindings没有。但是,我很困惑。为什么会这样? Key Bindings的触发方式与KeyListeners的触发方式有何不同?

P.S。我很确定这很罕见,但在某些情况下使用KeyListeners更合适吗?

2 个答案:

答案 0 :(得分:10)

How to Use Key Bindings解释了基础知识。

绑定用于将特定操作映射到特定KeyStroke。

当所有其他抽象都不起作用时,KeyListener是最后的手段。也许你在监听任何KeyStroke时会使用KeyListener。因此,为字母表中的所有字母创建26个绑定是不切实际的。

但在许多情况下,还有更好的API可供使用。例如,您可以使用DocumentListener来监听对Document的更改,而不是在文本字段上侦听KeyEvents。

答案 1 :(得分:0)

我建议你使用KeyBindings有很多原因:

  • 它实际上比KeyListener更快。
  • KeyBinding更为发达,并提供更多可能性。
  • 虽然您需要使用Swing计时器,但它最适合游戏。
  • 可以设置和分享。

将它用于KeyListener可能很困难,但KeyListener将无法处理游戏中的多次按键操作。