比较KeyListeners和Key Bindings之间的function

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

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

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

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

如何使用键绑定解释了基础知识。

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

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

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

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

  • 它实际上比KeyListener工作得更快。
  • KeyBinding更加发达,并提供了更多可能性。
  • 虽然你需要使用Swing计时器,但它对游戏来说更好。
  • 是可以设置和共享的。

除了KeyListener之外,它可能很难使用它,但KeyListener将无法处理游戏中的多次按键操作。