比较 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 之间的功能的主要内容,如果未能解决你的问题,请参考以下文章

redis cluster集群批量删除中的key

Nginx Docker构建https服务

python字典如何根据key比较value?

python中,如何将列表中的一列数据和字典的key比较?

Excel VBA:输入key和value两个单元格区域,以value的值比较排序,然后返回key的排序

Excel VBA:输入key和value两个单元格区域,以value的值比较排序,然后返回key的排序