Где в Java Swing Source реализация нажатия клавиши Enter в меню?

Я возился с иерархическим меню, пытаясь сделать его прокручиваемым. Да, я знаю о Menu Scroller в блоге Java Tips Weblog, но он не совсем делает то, что я хочу, поэтому я возился с его урезанной версией, и я не совсем заставляю его работать.

В основном я хочу, чтобы JMenu отображал слишком много элементов, на которых пользователь может нажимать клавиши со стрелками вверх и вниз для прокрутки меню. Я был мучительно близок к тому, чего хочу, но наткнулся на препятствие, которое лучше всего можно описать так:

Когда [ENTER] нажимается, когда всплывающее меню находится в фокусе, поведение по умолчанию — выполнение действия, связанного с выбранным элементом, и удаление меню. Если меню вложенное, всплывающие окна над ним в иерархии также закрываются (становятся невидимыми). Где закодировано это поведение? Я просмотрел все JMenu, JPopupMenu, JMenuItem, AbstractButton и не вижу того, что ищу. Где находится исходный код Swing, который выполняет это обычное поведение?

Если бы я знал ответ на этот вопрос, я мог бы понять, почему моя реализация не работает. Я могу выполнить действие, но меню и его родители не исчезнут. Конечно, я могу заставить меню исчезнуть с помощью setVisible(false), но я не могу пройтись по иерархии сдерживания, чтобы найти родительские меню и заставить ИХ исчезнуть.


person Steve Cohen    schedule 14.08.2013    source источник
comment
Вероятно, это будет в коде делегата пользовательского интерфейса...   -  person MadProgrammer    schedule 14.08.2013


Ответы (2)


Я могу выполнить действие, но меню и его родители не исчезнут.

Я думаю, вы можете использовать:

MenuSelectionManager.defaultManager().clearSelectedPath() 
person camickr    schedule 14.08.2013
comment
Чудесно. Как раз то, что мне было нужно! Спасибо, Роб! Спасибо, что прочитали мой плотный ночной вопрос и поняли, что мне нужно. - person Steve Cohen; 14.08.2013

Я не уверен на 100% в отношении меню, но для JTextComponent я знаю, что все нажатия клавиш (копирование, вставка, ввод, перемещение вперед по словам/предложениям/строкам, удаление и т. д.) реализованы через InputMap и ActionMap. JTextcomponents также используют Keymap, но Я почти уверен, что они относятся к текстовым компонентам.

person Jeffrey    schedule 14.08.2013