j'ai testé ton code , oui ca marche sauf que pour mon cas je ne veux pas de la combinaison alt+F1 mais tout simplement F1 directement
j'azi pas compris le truc des keymaps tu peux m'expliquer stp?
merci
j'ai testé ton code , oui ca marche sauf que pour mon cas je ne veux pas de la combinaison alt+F1 mais tout simplement F1 directement
j'azi pas compris le truc des keymaps tu peux m'expliquer stp?
merci
Pour un composant donne, tu peux definir une ActionMap et une InputMap.
- l'InputMap associe un KeyStroke (une touche ou combinaison de touche du clavier) a un nom.
- l'ActionMap associe un nom a une Action.
Quand le composant a le focus et detecte le KeyStroke en question, il recherche le nom dans l'InputMap puis active l'action associee dans ActionMap.
Ex pour installer une action :
Avec ce principe tu peux arriver a facilement te creer une interface pour associer des touches du clavier aux actions disponibles dans ton application (de maniere similaire aux ecrans de configuration du clavier dans des jeux par exemple). Tu peux aussi avoir plusieurs KeyStroke qui pointent sur la meme Action. Pour la cle tu n'est pas oblige d'utiliser le nom de l'Action, tu peux utiliser un identificateur maison.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Action action = ...; InputMap inputMap = getInputMap(); String key = (String)action.getValue(Action.NAME); KeyStroke keystroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); if (keystroke != null) { // Install into key map. inputMap.put(keystroke, key); // Install into action map. actionMap.put(key, action); }
Apres il faut t'arranger pour que ton composant ai le focus ou alors utiliser une action/input map plus globale que celle du composant meme.
Merci Bouye pour cette explication.
jlassiramzy, là où je voulais en venir, c’est que certains composants possèdent une default InputMap. En fait, à ma connaissance, tous les composants héritant de JComponent en possèdent une.
Si un composant intercepte ton « F1 » avant le composant dans lequel tu as définis ton action ... c’est perdu pour toi (sauf s’il a la politesse de retransmettre l’événement).
Pour ce qui est de ta remarque sur le « ALT+F1 » au lieu du « F1 », je dois admettre avoir été un peu distrait . Et je dois bien admettre que je ne vois pas du tout pourquoi ce « ALT » est là.
je ne sais pas si j'ai bien saii mais je vais essayer de m'en inspirer.
Mais au fait quelles seront les valeurs respectives aux touches F1..F12 si on raisonne en keystroke ?
Il y a quelque temps, j'ai été confronté à un problème similaire pour lequel j'ai dû vider une InputMap (http://www.developpez.net/forums/sho...ferrerid=81280) cela t'aidera peut être.
Pour ce qui est des valeurs respectives aux touches F1..F12, tant que je n'aurais pas trouvé pourquoi un KeyEvent.VK_F1 réagit à "ALT+F1" au lieu de "F1", je ne peux pas te dire.
F1..F12Envoyé par jlassiramzy
C'est indique dans la doc de la methode getKeyStroke(), hors touches modificatrices (alt, ctrl, etc...) il faut simplement utiliser le suffixe indique apres le VK_ dans la liste des constantes/keycode de KeyEvent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part KeyStroke s = KeyStroke.getKeyStroke("F1");
Une variante de cette methode accepte egalement un KeyEvent et une autre un keycode...
Effectivement si tu as un composant plus prioritaire qui utilise deja cette touche ou si ton application utilise JavaHelp, ben tu auras du mal a l'utiliser toi-meme.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager