Java-свинг:Ctrl+F1 работает не глобально, а любая другая комбинация клавиш.
Вопрос
У меня есть графический интерфейс с вкладками на севере.В его входную карту добавляется несколько ключевых событий:
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+Ф1 не имеет функции.Если другой компонент в фокусе (например.JTree), Ctrl+Ф1 выполняет действие.
Проблема в том, что это работает везде, если я изменю код ключа, например. VK_F2
.
Ключ Ф1 больше нигде в программе не используется.
Есть идеи?
Спасибо, Андре
Редактировать: Полнотекстовый поиск в исходном коде Java дал ответ:А ToolTipManager
регистрирует ключ Ctrl+Ф1 для отображения текста всплывающей подсказки при нажатии комбинации клавиш.Итак, если кнопка с подсказкой находится в фокусе, Ctrl+Ф1 обрабатывается ToolTipManager
.Иначе мое действие называется.
Решение
Чтобы получить ответ, вот решение, скопированное из вашего редактирования в вопросе.;-)
ToolTipManager регистрирует ключ Ctrl+Ф1 Чтобы отобразить текст подъема инструментов, если нажата комбинация клавиш.Поэтому, если кнопка с подъемом инструментов сфокусирована, Ctrl+Ф1 обрабатывается TooltipManager.В противном случае мое действие называется.
Другие советы
Возможно, ОС перенацеливает Ф1 ключ?Установите прослушиватель ключей и посмотрите, какие события обрабатываются.
КСТАТИ:Было бы полезно, если бы вы могли отредактировать свой вопрос и вставить тестируемый код.