【问题标题】:Comparing functionality between KeyListeners and Key Bindings比较 KeyListeners 和 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 更合适吗?

【问题讨论】:

    标签: java swing key-bindings keylistener


    【解决方案1】:

    How to Use Key Bindings 解释了基础知识。

    绑定用于将特定的动作映射到特定的按键。

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

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

    【讨论】:

    • 谢谢!这有很大帮助。我以前读过这个链接,但不像我刚才那样彻底。我很健忘。我完全跳过了解释键绑定如何工作的部分。 >:O
    【解决方案2】:

    出于多种原因,我建议您使用 KeyBindings:

    • 它实际上比 KeyListener 运行得更快。
    • KeyBinding 更加完善,提供更多可能性。
    • 虽然您需要使用 Swing 计时器,但它更适合游戏。
    • Is 是可设置和共享的。

    除了 KeyListener 之外很难使用它,但 KeyListener 将无法在游戏中处理多个按键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2011-07-06
      • 2015-11-26
      • 1970-01-01
      • 2011-12-16
      • 2010-12-02
      • 2020-02-01
      相关资源
      最近更新 更多