Например, скажите, что у меня есть серия кнопок стиля панели инструментов через вершину главного окна моего приложения. Я хочу присоединить мнемосхему к одному из них, это - просто единственное нажатие клавиши, как F3.
Когда Вы устанавливаете мнемосхему на KeyEvent.VK_F3
, пользователь должен нажать Alt+F3.
Если у Вас есть пункт меню, можно установить акселератор, а не мнемосхему, и выбрать, использовать ли метаклавишу. Кнопки не позволяют Вам установить акселератор, как бы то ни было.
Существует ли путь к повороту метаклавиши для мнемоники кнопки?
Actions могут привязать фрагмент кода к пункту меню, нажатию клавиши, кнопке и всему остальному, что вас интересует.
В общем, не думайте, что ваш код привязан к определенному нажатию клавиши/событию, и не используйте анонимные внутренние классы. Вместо этого используйте реальные классы, в которых ваш код может быть повторно использован для различных типов вещей. Шаблон, используемый классом Action, дает несколько хороших примеров этого.
За кулисами, используете ли вы ускоритель или мнемонику на компоненте, метод создаст для вас Связывание ключей.
Поэтому ничто не мешает вам привязать KeyStroke и Action к любому компоненту, который вы хотите, и вручную создать Key Binding. Это может быть даже компонент, у которого нет метода setMNemonic(...).
Вы уверены, что ускорители нельзя определить для кнопок, если кнопка была настроена с помощью действия? (Я знаю, что в какой-то момент это было правдой, но я подумал, что в более поздних версиях Java все будет по-другому.)
В любом случае, вот еще один способ установить его на кнопку:
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(myKeyStroke, "actionName");
button.getActionMap().put("actionName", myAction);
Где myKeyStroke - это нажатие клавиши например F3, «actionName» - это метка (String), а myAction - это действие, которое оно вызывает.