【问题标题】:Capturing specific keystrokes in Java Swing在 Java Swing 中捕获特定的击键
【发布时间】:2014-08-12 14:00:35
【问题描述】:

有很多关于如何在 Java Swing 中捕获击键的主题,但我想问一下最佳实践。例如,我有一个窗口,我希望在其中收听 Mac 上的 F1Command-P(或 PC 上的 CTRL-P)的击键。

阅读The official Javadoc for KeyEvent,似乎使用Key Typed 事件而不是Key PressedKey Released 事件是更好的做法,因为它们是更高级别的。这对我来说很有意义,我什至发现为了确保程序与平台无关,我必须指定一个按键对象:

private KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());

这应该允许捕获 Mac 上的 Command 加速键和 PC 上的 CTRL 加速键。 (我希望我正确地使用了这些术语。)既然我有一个KeyStroke 对象,我该如何对照我的KeyListener 中的KeyEvent 对象检查它?并且检查F1 关键事件只会使问题进一步复杂化,尽管希望不会太多。

建议?

【问题讨论】:

  • 优于KeyListener 使用Key Binding。由于您已经有了KeyStroke,因此您必须将其附加到某个组件的 InputMap,然后您只需要一个 Action 即可将其附加到组件的 ActionMap。

标签: java swing keylistener keyevent keystroke


【解决方案1】:

既然我有一个 KeyStroke 对象,我该如何对照我的 KeyListener 中的 KeyEvent 对象检查它?

您不使用 KeyListener。 Swing 旨在与Key Bindings 一起使用。

查看Key Bindings,其中包含列出每个 Swing 组件的默认绑定的程序。它还提供了一些示例,说明如何创建自己的ey Bindings。它还包含一个指向 Key Bindings 的 Swing 教程的链接,该教程更详细地解释了整个过程

【讨论】:

  • 完美!感谢您的帮助,@camickr 和 @dic19。这确实让事情变得更简单,我可以使用相同的 KeyStroke 对象,因此它应该响应 Mac 和 Windows 上的正确键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2012-02-05
相关资源
最近更新 更多