Java Swing: могу ли я установить мнемонику кнопки, которая не требует нажатия клавиши Alt?

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

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

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

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


person Electrons_Ahoy    schedule 02.03.2010    source источник


Ответы (3)


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

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

person Bill K    schedule 02.03.2010

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

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

person camickr    schedule 02.03.2010

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

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

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

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

person Avrom    schedule 03.03.2010