比较 KeyListeners 和 Key Bindings 之间的功能
Posted
技术标签:
【中文标题】比较 KeyListeners 和 Key Bindings 之间的功能【英文标题】:Comparing functionality between KeyListeners and Key Bindings 【发布时间】:2012-01-29 15:48:03 【问题描述】:当一位匿名用户对我的一个涉及 KeyListeners 的答案投反对票并建议改用 Key Bindings 时,就出现了这个问题。这个匿名用户告诉我 KeyListener 接口是一个旧的 AWT 解决方案,不应该使用。
但是,我不知道我是否应该完全相信这些信息。我在各种网站上都进行了研究,包括 oracle,但没有发现任何关于 KeyListeners 或 Key Bindings 的功能。我知道这两个执行类似任务的事实,但不确定“幕后”到底发生了什么。
我有点倾向于在未来的项目中使用 Key Bindings,仅仅是因为我获得的研究表明 KeyListener 接口要求相关组件具有焦点,而 Key Bindings 没有。但是,我很困惑。为什么会这样? Key Bindings 的触发方式与 KeyListeners 有何不同?
P.S.我很确定这很少见,但是在某些情况下使用 KeyListeners 更合适吗?
【问题讨论】:
【参考方案1】:How to Use Key Bindings 解释了基础知识。
绑定用于将特定的动作映射到特定的按键。
当所有其他抽象都不起作用时,KeyListener 是最后的手段。当您监听 ANY KeyStroke 时,也许您会使用 KeyListener。因此,为所有字母创建 26 个绑定是不切实际的。
但在许多情况下,还是有更好的 API 可供使用。例如,您可以使用 DocumentListener 来监听 Document 的更改,而不是监听文本字段上的 KeyEvent。
【讨论】:
谢谢!这有很大帮助。我以前读过这个链接,但不像我刚才那样彻底。我很健忘。我完全跳过了解释键绑定如何工作的部分。 >:O【参考方案2】:出于多种原因,我建议您使用 KeyBindings:
它实际上比 KeyListener 运行得更快。 KeyBinding 更加完善,提供更多可能性。 虽然您需要使用 Swing 计时器,但它更适合游戏。 Is 是可设置和共享的。除了 KeyListener 之外很难使用它,但 KeyListener 将无法在游戏中处理多个按键。
【讨论】:
以上是关于比较 KeyListeners 和 Key Bindings 之间的功能的主要内容,如果未能解决你的问题,请参考以下文章