【问题标题】:What is the difference between KeyListeners and KeyBinders? [closed]KeyListeners 和 KeyBinders 有什么区别? [关闭]
【发布时间】:2023-03-21 19:20:01
【问题描述】:

标题几乎概括了它。我刚开始在程序中使用键盘,想知道是什么让它们与众不同,哪个更易于使用等。

【问题讨论】:

  • 请提出一个我们可以明确回答的问题。到目前为止,您尝试过什么?
  • @TomCammann 哦算了。我将删除此帖子。
  • 一般来说,对 Swing 应用程序使用键绑定,而不是 KeyListener。教程会一一解释。
  • KeyBindings 提供的优势是它可以正确处理焦点组件、其祖先和子组件的问题,而 keylistener 仅适用于焦点组件。此外,它们简化了相同操作在不同情况下的重用。基本上,您应该始终使用 KeyBindings。在某些情况下,例如对于文本组件,您可能会想使用 KeyListener,但在这种情况下还有其他接口,例如 DocumentListener。
  • @Computerology 就个人而言,我认为这个问题没有任何问题,它可能不适合 SO,但由于 99% 与关键事件相关的问题都围绕着使用 KeyListeners 的人他们应该使用键绑定,我欢迎它。

标签: java swing keyboard keylistener


【解决方案1】:

KeyListener 是 AWT 和 Swing 使用的原始机制,允许组件注册对关键事件的兴趣。它是一个低级 API,可提供有关按键事件的大量信息(如修饰符)。

出于多种原因,在大多数情况下不鼓励这种监控关键事件的方法。第一个事实是,为了让组件(通过此 API)接收键事件,它必须是可聚焦的并且具有当前键盘焦点。这是一个陷阱,99% 的关于 KeyListeners 的问题都与此有关。

第二个与代码的外观有关,传统上,使用KeyListener 需要您有一个大的if-else 语句,同时考虑到各种击键及其潜在的修饰符,随着时间的推移可能会变得很麻烦 -同样的批评也可以指向ActionListener

Key Bindings 是一种较新的 API(并且是更大的输入绑定 API 的一部分),可用于监控非常具体的键事件。这包括单个按键和修饰符。

键绑定也使用Actions API,这意味着您可以在程序的许多不同部分重用Action,而无需每次都重新实现逻辑。

来自How to use Key Bindings

键绑定的替代方法是使用键侦听器。关键听众 有它们作为键盘输入的低级接口的位置,但是对于 响应单个键键绑定更合适, 往往会导致更容易维护的代码。主要听众也是 如果要在组件时激活键绑定,则很困难 没有焦点。键绑定的一些优点是 有点自我记录,将包含层次结构纳入 帐户,鼓励可重用的代码块(Action 对象),并允许 易于删除、自定义或共享的操作。此外,他们使 很容易改变一个动作所绑定的键。其他 Actions 的优点是它们具有启用状态,该状态提供 一种简单的方法来禁用操作,而无需跟踪哪个 它附加到的组件。

【讨论】:

  • 谢谢。这就是我想知道的。抱歉问了一个糟糕的问题。
  • 正如我所说,我不认为这个问题很糟糕,我实际上喜欢它,它可能不适合 SO。有很多人可以从这个问题中学到东西,当他们发布关于为什么 KeyListener 不起作用的问题时,我会给出链接。虽然严格来说不是一个 SO 问题,但我认为人们在提出一个好的问题时需要有更多的回旋余地。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 2011-09-20
  • 2013-03-25
  • 2023-03-08
  • 2016-07-17
  • 2015-07-17
  • 2014-07-11
  • 2020-12-28
相关资源
最近更新 更多