У меня есть свинг-интерфейс с панелью с вкладками на севере. На карту ввода добавлено несколько ключевых событий:
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 для отображения текста всплывающей подсказки при нажатии комбинации клавиш. Таким образом, если кнопка с всплывающей подсказкой находится в фокусе, Ctrl + F1 обрабатывается ToolTipManager. В противном случае называется мое действие.




Может ОС перенаправляет ключ F1? Установите ключевой прослушиватель и посмотрите, какие события обрабатываются.
BTW: Было бы полезно, если бы вы могли отредактировать свой вопрос и вставить некоторый проверяемый код.
Чтобы получить ответ, вот решение, скопированное из вашей правки в вопросе. ;-)
The ToolTipManager registeres the Key Ctrl+F1 to display the tooltip text if the key combination is pressed. So if a button with a tooltip is focused, Ctrl+F1 is handled by the ToolTipManager. Otherwise my action is called.
Спасибо за Ваш ответ. После долгих поисков java-кода, если нашел ответ (см. Править). Используемая ОС обрабатывает ключевые события только с нажатой клавишей ALT;)