Java Swing JMenu Mnemonic - PullRequest
       2

Java Swing JMenu Mnemonic

8 голосов
/ 14 декабря 2010

У меня есть меню, которое я создал с помощью JMenu. Я хочу назначить сочетание клавиш Alt-F для этого меню. Для этого я использовал setMnemonic ('F'), но меню не распознает мнемонику.

Каков наилучший способ устранения или устранения этой проблемы? Я считаю, что установка точки останова не очень помогает.

Спасибо.

Фрагмент кода:

//higher up in variable declaration
/** Menus on the menu bar */
private JMenu uiFindMnu           = new JMenu("Find");
...
//inside the constructor
// set mnemonic for the Find menu
uiFindMnu.setMnemonic('F');

Ответы [ 3 ]

5 голосов
/ 14 декабря 2010

Внутри конструктора класса (расширяющий JFrame):

JMenu helpmenu = new JMenu("File");
helpmenu.setMnemonic('F');
JMenuBar menubar = new JMenuBar();
menubar.add(helpmenu);
setJMenuBar(menubar);

Это прекрасно сработало для меня. Вы должны будете дать более подробную информацию о вашем коде, чтобы я мог дать лучший ответ. Что касается устранения неполадок SWING или любого графического интерфейса приложения, я могу дать одну из лучших рекомендаций - создать максимально простой сценарий. Я храню шаблон JFrame, чтобы можно было просто набросать такой код для тестирования. Как только вы узнаете, что он работает в простейшем сценарии, вы можете вернуться к своему проекту и выяснить, какая другая часть вашего графического интерфейса вызывает конфликт с этой функциональностью.

Просто из любопытства, у вас в конструкторе нет локальной переменной uiFindMnu, которая скрывает вашу переменную класса, не так ли? Я бы дважды проверил, чтобы убедиться, что переменная, для которой вы вызываете setMnemonic (), является той, которая добавляется в ваш MenuBar (и фактически отображается).

2 голосов
/ 10 апреля 2013

Пострадал с подобной проблемой и понял, что из-за установки Внешний вид после инициализации компонентов вызвал проблему.Пролистал заявления и все заработало.

Написал пост в блоге здесь

2 голосов
/ 14 декабря 2010

Использование setMnemonic(KeyEvent.VK_F);

Рекомендую прочитать об JMenus: Как использовать меню

Вот выдержка из этой статьи:

Меню поддерживают два вида альтернатив клавиатуры: мнемоника и ускорители.Мнемоника предлагает способ использовать клавиатуру для навигации по иерархии меню, увеличивая доступность программ.Ускорители, с другой стороны, предлагают сочетания клавиш для обхода навигации по иерархии меню.Мнемоника для всех пользователей;Ускорители предназначены для опытных пользователей.

Мнемоника - это ключ, позволяющий выбрать уже видимый пункт меню.Например, в MenuDemo первое меню имеет мнемонику A, а второй пункт меню имеет мнемонику B. Это означает, что при запуске MenuDemo с использованием внешнего вида Java нажатие клавиш Alt и A приводит к появлению первого меню.Пока отображается первое меню, нажатие клавиши B (с или без Alt) позволяет выбрать второй пункт меню.Пункт меню обычно отображает свою мнемонику, подчеркивая первое вхождение мнемонического символа в тексте пункта меню, как показано на следующем снимке.B - мнемонический символ для этого пункта меню

Мнемонику можно указать либо при создании элемента меню, либо с помощью метода setMnemonic.Вот примеры настройки мнемоники и ускорителей:

//Setting the mnemonic when constructing a menu item:
menuItem = new JMenuItem("A text-only menu item",
                         KeyEvent.VK_T);

//Setting the mnemonic after creation time:
menuItem.setMnemonic(KeyEvent.VK_T);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...