IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[JButton]Associer un raccourci clavier a certaines touches du clavier ?


Sujet :

AWT/Swing Java

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    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

  2. #22
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 864
    Points : 22 910
    Points
    22 910
    Billets dans le blog
    51
    Par défaut
    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 :

    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);
    }
    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.

    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.

  3. #23
    Membre averti

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Points : 371
    Points
    371
    Par défaut
    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à.

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    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 ?

  5. #25
    Membre averti

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Points : 371
    Points
    371
    Par défaut
    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.

  6. #26
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 864
    Points : 22 910
    Points
    22 910
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par jlassiramzy
    Mais au fait quelles seront les valeurs respectives aux touches F1..F12 si on raisonne en keystroke ?
    F1..F12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    KeyStroke s = KeyStroke.getKeyStroke("F1");
    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.
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/11/2007, 14h36
  2. interdire certaine touche du clavier
    Par Renardo dans le forum Access
    Réponses: 14
    Dernier message: 19/08/2006, 20h27
  3. Associer un son ou une musique à une touche du clavier
    Par Revan777 dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/04/2006, 21h33
  4. désactiver certaines touches du clavier...
    Par youp_db dans le forum C
    Réponses: 4
    Dernier message: 23/01/2006, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo