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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    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 chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    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 chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    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 confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    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 chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    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 confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    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 Expert
    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
    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 confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    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 chevronné
    Avatar de Orian
    Inscrit en
    Août 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2006
    Messages : 372
    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
                }
            });

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 16h57
  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, 12h47
  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, 13h22
  4. associer un son à une action
    Par Invité dans le forum Access
    Réponses: 8
    Dernier message: 28/02/2007, 14h47
  5. Réponses: 11
    Dernier message: 05/12/2005, 10h08

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