Есть много тем о том, как фиксировать нажатия клавиш в Java Swing, но я хотел бы спросить о наилучшей практике. Например, у меня есть окно, в котором я хочу прослушать нажатие клавиши F1
или Command-P
на Mac (или CTRL-P
на ПК).
Читая официальную документацию по Java для KeyEvent, кажется, лучше использовать события Key Typed
, а не события Key Pressed
или Key Released
, потому что они более высокого уровня. Для меня это имеет смысл, и я даже обнаружил, что для того, чтобы убедиться, что программа независима от платформы, я должен указать объект нажатия клавиши следующим образом:
private KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
Это должно позволить захватить клавишу быстрого доступа Command
на Mac и клавишу быстрого доступа CTRL
на ПК. (Надеюсь, я правильно использую эти термины.) Итак, теперь, когда у меня есть объект KeyStroke
, как мне проверить его на соответствие объекту KeyEvent
в моем KeyListener
? А добавление проверки на событие клавиши F1
только еще больше усложняет дело, хотя, надеюсь, не слишком сильно.
Предложения?
KeyListener
, используйте привязку ключей. Поскольку у вас уже естьKeyStroke
, вам нужно прикрепить его к InputMap некоторого компонента, а затем вам понадобится толькоAction
, чтобы прикрепить его к ActionMap компонента. - person dic19   schedule 12.08.2014