【发布时间】:2014-08-12 14:00:35
【问题描述】:
有很多关于如何在 Java Swing 中捕获击键的主题,但我想问一下最佳实践。例如,我有一个窗口,我希望在其中收听 Mac 上的 F1 或 Command-P(或 PC 上的 CTRL-P)的击键。
阅读The official Javadoc for KeyEvent,似乎使用Key Typed 事件而不是Key Pressed 或Key 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