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 :

Associer une KeyEvent à une Action


Sujet :

AWT/Swing Java

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut Associer une KeyEvent à une Action
    Salut à tous et joyeuses fêtes,

    J'ai essayé d'associer un événement clavier à une action mais je n'y suis pas parvenu. J'aurais voulu savoir comment est-ce qu'on fait cela.

    Ma façon de le faire est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Action monAction = new AbstractAction("action"){
              public void actionPerformed(ActionEvent event){
                       ...          
              }
    };
    monAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
    Mais ça ne marche pas, l'action marche mais le raccourci clavier n'a aucun effet.

    Merci

  2. #2
    Membre averti
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Points : 401
    Points
    401
    Par défaut
    Si tu utilisais un KeyListener et ensuite à la pace de ton ActionEvent public void keyPressed(KeyEvent e)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Merci de ta réponse Orian mais si je fais ça le reste ne marchera pas, c'est-à-dire que mon action est utilisée par un JMenuItem donc il faut que l'action marche lorsque je clique sur ce JMenuItem et lorsqu'on presse le raccourci clavier.

  4. #4
    Membre averti
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Points : 401
    Points
    401
    Par défaut
    Pourquoi tu n'as pas dit ça plus tôt !!?

    Avec un JMenuItem c'est encore plus simple, tu peux induiquer le raccourci clavier dans le constructeur de celui-ci .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new JMenuItem("Ton text", KeyEvent.VK_TaTouche)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Oui ça je sais le faire, j'avais fait comme cela avant avec monMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); mais maintenant j'associe l'action à mon menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Action monAction = new AbstractAction("action"){
              public void actionPerformed(ActionEvent event){
                       ...          
              }
    };
    monAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
    JMenuItem monMenuItem = new JMenuItem(monAction);
    Avec ça le raccourci ne marche plus et si je laisse monMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK)); c'est pareil.

  6. #6
    Membre averti
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Points : 401
    Points
    401
    Par défaut
    En mettant le raccourcis clavier dans le constructeur de ton JMenuItem, ça ne va pas?
    Je veux dire en définissant le KeyEvent pour le JMenuItem, pas pour ton action.

    Du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Action monAction = new AbstractAction("action"){
              public void actionPerformed(ActionEvent event){
                       ...          
              }
    };
     
    JMenuItem monMenuItem = new JMenuItem("texte du JmenuItem", KeyEvent.VK_TaTouche );
    monMenuItem.addActionListenner(monAction);

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    J'ai essayé en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Action monAction = new AbstractAction("action"){
              public void actionPerformed(ActionEvent event){
                       ...          
              }
    };
     
    JMenuItem monMenuItem = new JMenuItem("menu", KeyEvent.VK_C);
    monMenuItem.addActionListener(monAction);
    ou comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Action monAction = new AbstractAction("action"){
              public void actionPerformed(ActionEvent event){
                       ...          
              }
    };
    JMenuItem monMenuItem = new JMenuItem(monAction);
    monMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
    et rien ne marche au niveau du raccourci chez moi

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    J'aurais tendance à faire ça, moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Action monAction = new AbstractAction("MonTexte") {
      { // Constructeur de classe anonyme
        putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("control C"));
      }
      public void actionPerformed (ActionEvent event) {
        ...          
      }
    };
     
    JMenuItem monMenuItem = new JMenuItem(monAction);
    Cela reste lisible et utilisable, tout en confinant les écoutes à l'Action et pas au JMenuItem.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Merci de ta réponse dingoth mais ça ne marche toujours pas.
    Je ne sais vraiment pas comment faire.

  10. #10
    Membre averti
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    Points : 401
    Points
    401
    Par défaut
    Bon dernière solution tirée de la doc de sun (si ça marche pas je me coupe les cheveux )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    menuItem = new JMenuItem("Texte de ton item",
                             KeyEvent.VK_C);
     
    menuItem.setMnemonic(KeyEvent.VK_C);
     
    menuItem.setAccelerator(KeyStroke.getKeyStroke(
            KeyEvent.VK_C));
     
    JMenuItem.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    //Ce que tu veux faire dans ton action
                }
            });

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Vu que tu utilises des AbstractAction tu a la possibilité de passer par l'InputMap du composant plutôt que de faire joujou avec un keylistener

    http://www.exampledepot.com/egs/java...Map.html?l=rel

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Merci à tous de vos réponses.

    Je viens de trouver d'où venait le problème. J'utilisais les raccourci clavier CTRL-C, CTRL-X et CTRL-V mais ils ne marchent pas. Ils doivent être bloqués à l'utilisation.

    Merci encore.

  13. #13
    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
    salut,

    c'est a dire bloqués? pourrais tu expliquer stp ca m'interesse a vrai dire

    merci

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 58
    Points
    58
    Par défaut
    Dans mon cas pour mes actions des JMenuItem les raccourcis comme CTRL+C ou CTRL+V sont désactivés.

    La raison, je ne serais l'expliquer car le CTRL+S marche par contre chez moi.

    Désolé, peut être quelqu'un d'autre pour te la dire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 17h57
  2. [XL-2010] Copie d'un tableau d'une feuille à une autre : une cellule ne se recopie pas
    Par mchouv dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/07/2014, 13h47
  3. [RegExp] Détecter des combinaisons dans une chaine une par une
    Par vermine dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/06/2010, 14h22
  4. associer un son à une action
    Par Invité dans le forum Access
    Réponses: 8
    Dernier message: 28/02/2007, 15h47
  5. Réponses: 11
    Dernier message: 05/12/2005, 11h08

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