Java Swing: Ctrl + F1 ne fonctionne pas globalement, mais combinaison de touches
Question
J'ai un interface graphique avec un volet à onglets dans le nord. Plusieurs événements clés sont ajoutés à sa carte en entrée:
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");
Si le volet à onglets ou un autre bouton d'une barre d'outils a le focus, Ctrl + F1 n'a aucune fonction. Si un autre composant est activé (par exemple, JTree), Ctrl + F1 exécute l'action.
Le problème, c’est que ça marche partout si je change le Keycode en, par exemple. VK_F2
.
La clé F1 n'est utilisée nulle part ailleurs dans le programme.
Une idée?
Merci, Andr & # 233;
Modifier: Une recherche en texte intégral dans le code source Java a donné la réponse suivante: ToolTipManager
enregistre la clé Ctrl + F1 pour afficher le texte de l'info-bulle si vous appuyez sur la combinaison de touches. Donc, si un bouton avec une info-bulle est activé, Ctrl + F1 est géré par le ToolTipManager
. Sinon, mon action s'appelle.
La solution
Pour obtenir une réponse, voici la solution copiée à partir de votre modification dans la question. ; -)
Le ToolTipManager enregistre la clé Ctrl + F1 pour afficher le texte de l'info-bulle si la combinaison de touches est enfoncée. Donc si un bouton avec une info-bulle est activé, Ctrl + F1 est géré par le ToolTipManager. Sinon mon action est appelé.
Autres conseils
Peut-être que le système d'exploitation redéfinit la clé F1 ? Installez un écouteur de clé et voyez quels événements sont gérés.
BTW: Cela vous aiderait si vous pouviez éditer votre question et insérer du code testable.