当匿名用户对我的涉及 KeyListeners 的回答投反对票并建议改用 Key Bindings 时,出现了这个问题。这位匿名用户告诉我,KeyListener 接口(interface)是一个旧的 AWT 解决方案,不应使用。
但是,我不知道我是否应该完全相信这些信息。我在各种网站上都进行了研究,包括 oracle,但没有发现任何关于 KeyListeners 或 Key Bindings 的功能。我知道这两者执行类似的任务,但不确定“幕后”究竟发生了什么,可以这么说。
我有点倾向于在未来的项目中使用 Key Bindings,因为我获得的研究表明 KeyListener 接口(interface)要求相关组件具有焦点,而 Key Bindings 则不需要。但是,我很困惑。为什么会这样? Key Bindings 的触发方式与 KeyListeners 有何不同?
P.S. 我很确定这很少见,但在某些情况下使用 KeyListeners 更合适吗?
最佳答案
How to Use Key Bindings解释基础知识。
绑定(bind)用于将特定的 Action 映射到特定的 KeyStroke。
当所有其他抽象都不起作用时,KeyListener 是最后的手段。也许您会在监听任何 KeyStroke 时使用 KeyListener。因此,为字母表中的所有字母创建 26 个绑定(bind)是不切实际的。
但在许多情况下,还有更好的 API 可供使用。例如,您可以使用 DocumentListener 来监听文档的更改,而不是在文本字段上监听 KeyEvents。
关于java - 比较 KeyListeners 和 Key Bindings 之间的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664250/