2008-09-26 8 views
4

J'ai un swing gui avec une vitre à onglets dans le nord. Plusieurs événements clés sont ajoutés à la carte d'entrée:Java Swing: Ctrl + F1 ne fonctionne pas globalement, mais chaque autre combinaison de touches

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 dans une barre d'outils a le focus, Ctrl +F1 n'a pas de fonction. Si un autre composant est focalisé (par exemple JTree), Ctrl + F1 exécute l'action.

Le problème est que cela fonctionne partout si je change le Keycode par ex. VK_F2. La clé F1 n'est utilisée nulle part ailleurs dans le programme.

Une idée?

Merci, André

Edit: Une recherche en texte intégral dans le code source java a donné la réponse: Le ToolTipManager registeres la touche Ctrl + F1 pour afficher le texte de l'info-bulle si la combinaison de touches est pressé. Donc, si un bouton avec une info-bulle est focalisé, Ctrl + F1 est géré par le ToolTipManager. Sinon, mon action est appelée.

Répondre

2

Pour obtenir une réponse, voici la solution copiée à partir de votre modification dans la question. ;-)

Le ToolTipManager registeres la touche Ctrl + F1 pour afficher le texte infobulle la combinaison de touches. Donc, si un bouton avec une info-bulle est concentré, Ctrl +F1 est gérée par le ToolTipManager. Sinon, mon action est appelée .

+1

LOL, la réponse est acceptée;) –

0

Peut-être que le système d'exploitation retarget la clé F1? Installez un écouteur de clé et voyez quels événements sont gérés.

BTW: Il serait utile si vous pouviez éditer votre question et insérer du code testable.

+0

Merci pour votre réponse. Après une longue période de recherche dans le code Java, si vous trouvez la réponse (voir modifier). L'OS utilisé ne gère que les événements clés avec ALT enfoncé;) –

Questions connexes