2011-12-14 1 views
6

Я опытный Java-программист, но новичок Swing, поэтому, пожалуйста, несите меня.Как получить фокус в JPopupMenu

Я хочу иметь JPopupWindow с фокусом клавиатуры. Я хочу отвечать на клавиши со стрелками, бежать (чтобы закрыть меню) и Enter (для вызова элемента). Должен ли я добавлять KeyListener в меню и кодировать все это самостоятельно, или есть какой-то «режим», который я могу настроить для активации этого поведения, которое, похоже, должно быть стандартным.

В стандартном разделе руководства Swing на JPopupMenus говорят только о мнемониках и ускорителях. Я особо не хочу этого.

Трудно поверить, что это полностью против зерна JPopupMenu.

Что такое лучший способ получить что-то вроде того, что я хочу реализовать?

ответ

6

Как только вы сделаете jpopupMenu.show(Component invoker, int x, int y), он автоматически ответит на клавиатуру так, как вы хотите. не Если это не работает, то вам могут понадобиться, чтобы исправить некоторые другие вопросы, то есть какой-то другой компонент выхватывает фокус в меню, когда оно должно и т.д.

+0

hmm. Я использовал setVisible (true), а не show(), но я вижу, что show() устарел в пользу setVisible()/ –

+0

Я говорил о методе show (Component invoker, int x, int y), который я использовал в мой код. Извините за недопонимание. –

+0

Вот и ответ. Я не был привязан к компоненту. Ответ Трашгода также был необходим для этого. Спасибо вам обоим. –

3

Вместо KeyListener, я бы рекомендовал добавить Action экземпляров к вашим JPopupMenu. Используйте setComponentPopupMenu(), чтобы добавить всплывающее окно на панель.

+1

спасибо, ваш вход, вместе с AKJ выше, получил эту работу. –

+0

Отлично; для справки, есть недавно обновленный пример [здесь] (http://stackoverflow.com/a/5129757/230513). – trashgod