Java Swing: я могу установить мнемосхему кнопки, которая не требует нажимающего высокого звука?

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

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

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

Существует ли путь к повороту метаклавиши для мнемоники кнопки?

7
задан Electrons_Ahoy 2 March 2010 в 22:10
поделиться

3 ответа

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

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

4
ответ дан 7 December 2019 в 07:44
поделиться

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

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

3
ответ дан 7 December 2019 в 07:44
поделиться

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

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

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

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

0
ответ дан 7 December 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: