Java Swing: Ctrl + F1 не работает глобально, но каждая комбинация клавиш - PullRequest
4 голосов
/ 26 сентября 2008

У меня есть свинг-интерфейс с панелью с вкладками на севере. Несколько ключевых событий добавлены к его карте ввода:

InputMap paneInputMap = pane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_E, KeyEvent.CTRL_MASK ), "finish");
paneInputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_F1, KeyEvent.CTRL_MASK ), "toggletoolbar");

Если панель с вкладками или другая кнопка на панели инструментов имеет фокус, Ctrl + F1 не имеет функции. Если другой компонент находится в фокусе (например, JTree), Ctrl + F1 выполняет действие.

Проблема в том, что он работает везде, если я изменю код ключа, например, на. VK_F2.

Клавиша F1 нигде в программе не используется.

Есть идеи?

Спасибо, Андре

Редактировать: Полнотекстовый поиск в исходном коде Java дал ответ: ToolTipManager регистрирует ключ Ctrl + F1 для отображения всплывающей подсказки текст, если нажата комбинация клавиш. Поэтому, если кнопка с всплывающей подсказкой находится в фокусе, ToolTipManager обрабатывается Ctrl + F1 . В противном случае мое действие называется.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2008

Чтобы получить ответ, вот решение, скопированное из вашей правки в вопросе. ; -)

ToolTipManager регистрирует ключ Ctrl + F1 для отображения текста всплывающей подсказки, если комбинация клавиш нажата. Так что если кнопка с всплывающей подсказкой фокусируется, Ctrl + F1 обрабатывается ToolTipManager. В противном случае мои действия называется.

0 голосов
/ 26 сентября 2008

Может быть ОС перенаправит клавишу F1 ? Установите ключевой приемник и посмотрите, какие события обрабатываются.

Кстати: было бы полезно, если бы вы могли отредактировать свой вопрос и вставить тестируемый код.

...