Java Swing: могу ли я установить мнемонику кнопки, которая не требует нажатия alt? - PullRequest
7 голосов
/ 03 марта 2010

Например, скажем, у меня есть ряд кнопок в стиле панели инструментов в верхней части главного окна моего приложения. Я хочу прикрепить мнемонику к одному из них, это всего лишь одно нажатие клавиши, например, F3.

Когда вы установите мнемонику на KeyEvent.VK_F3, пользователь должен нажать Alt + F3.

Если у вас есть пункт меню, вы можете установить ускоритель, а не мнемонику, и выбрать, использовать ли мета-ключ. Однако кнопки не позволяют установить ускоритель.

Есть ли способ повернуть мета-ключ для мнемоники кнопок?

Ответы [ 3 ]

4 голосов
/ 03 марта 2010

Действия могут связать кусок кода с пунктом меню, нажатием клавиши, кнопкой и всем, что вас интересует.

В общем, не думайте, что ваш код привязан к определенному нажатию клавиши / событию, и не используйте анонимные внутренние классы. Вместо этого используйте реальные классы, где ваш код может быть повторно использован для разных типов вещей. Этот шаблон, используемый классом Action, дает несколько хороших примеров этого.

3 голосов
/ 03 марта 2010

За кулисами, используете ли вы ускоритель или мнемонику для компонента, метод создаст для вас связывание клавиш .

Так что ничто не мешает вам связать KeyStroke и Action с любым компонентом, который вы хотите, и вручную создать связывание клавиш. Это может быть даже компонент, который не имеет метода setMNemonic (...).

0 голосов
/ 04 марта 2010

Вы уверены, что ускорители нельзя определить на кнопках, если кнопка была настроена с помощью действия? (Я знаю, что в какой-то момент это было правдой, но я подумал, что это может отличаться в более поздних версиях Java.)

В любом случае, есть еще один способ установить его на кнопку:

button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(myKeyStroke, "actionName");
button.getActionMap().put("actionName", myAction);

Если myKeyStroke - это нажатие клавиши, например F3, «actionName» - это метка (String), а myAction - это действие, которое оно вызывает.

...