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 :

Détecter l'appui sur la touche "Supp"


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 173
    Points : 168
    Points
    168
    Par défaut Détecter l'appui sur la touche "Supp"
    Bonjour,

    Dans une JComboBox, comment faire pour que, lorsque je clique sur la touche "Supp" ou "Del" du clavier => l'élement sélectionné de la liste sera supprimer ?

    et merci d'avance

  2. #2
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Salut.

    Pour gérer les événements clavier sur un composant, il faut utiliser l'interface KeyListener.

    Cette interface définit 3 méthodes :

    - keyPressed (méthode invoquée lorsque l'on presse une touche)
    - keyReleased (méthode invoquée lorsque l'on relâche une touche)
    - keyTyped (méthode invoquée lorsque l'on appuie sur une touche)

    Dans ton cas, il va falloir que tu crées une classe implémentant cette interface
    en définissant une action pour l'événement keyTyped. Vu que tu n'as pas besoin des autres méthodes tu peux tout simplement créer une classer qui dérive de KeyAdapter qui est une classe implémentant l'interface KeyListener en fournissant une implémentation par défaut pour chacune des méthodes (tu n'auras ainsi qu'à redéfinir la méthode qui t'intéresse).

    Il faut donc tout d'abord que tu crées une classe dérivant de KeyAdapter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class DeleteKeyListener extends KeyAdapter{
     
         public void keyTyped(KeyEvent e){
                   if(e.getKeyCode()==KeyEvent.VK_DELETE  || e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
                              //action de suppression
                   }
         } 
    }
    Note : cette classe peut très bien être une classe interne à ta classe graphique principale. Cela te permettra d'accéder plus facilement à ta variable JComboBox pour connaitre l'élément sélectionné.




    Ensuite, tu ajoute ta classe écouteur à ta JComBox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    taJComboBox.addKeyListener(new DeleteKeyListener());


    Note bien aussi que tu peux également utiliser une classe interne anonyme pour coder ton action.


    Et normalement ça devrait fonctionner.

    Si c'est pas clair, n'hésite pas à demander des précisions.

    A+

    PS: le cas échéant, tu peux aller jeter un coup d'oeil au tuto de Sun sur les KeyListener.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 173
    Points : 168
    Points
    168
    Par défaut
    j'ai testé mais sa n'a pas marché (lorsque je clique sur le bouton Del)

    j'ai affiché quelque variable pour contrôler l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("e.getKeyCode()="+e.getKeyCode()+" | KeyEvent.VK_DELETE="+KeyEvent.VK_DELETE+" | KeyEvent.VK_BACK_SPACE="+KeyEvent.VK_BACK_SPACE);
    et laffichage est comme suit: e.getKeyCode()=0 | KeyEvent.VK_DELETE=127 | KeyEvent.VK_BACK_SPACE=8

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Ce n'est pas vraiment un KeyListener qu'il faut utiliser pour une action sur une touche. Il faut se servir des InputMap.

    Un exemple pour ajouter une action de création sur la combinaison de touche Ctrl+N ou F4 dans une JTable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		// Add action map
    		InputMap inputMap = panelContenantMaTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
     
    		// raccourci pour création
    		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_N, KeyEvent.CTRL_DOWN_MASK), "create");
    		inputMap.put(KeyStroke.getKeyStroke(KeyEvent.getKeyText(KeyEvent.VK_F4)), "create");
    		m_panel.getActionMap().put("create", new CreateAction(true));
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 173
    Points : 168
    Points
    168
    Par défaut
    merci pour vos reponse

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 95
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    je reviens sur ce topic qui est intéressant. En effet, j'aimerais savoir quelle est la différence entre l'utilisation d'un KeyListener et d'un InputMap. Aussi, quand utilisez l'un et pas l'autre et vice versa ?

    En effet, j'aimerais créer un évènement associé à un JtextArea qui fait partie de ma vue dans mon modèle MVC

    --> Quand l'utilisateur supprime du texte dans le JtextArea alors informer mon modèle grâce au controleur. <--


    Merci d'avance,

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Une InputMap + ActionMap permet de découpler une action (a effectuer) du raccourci clavier qui permet de le déclencher. Ca permet par exemple de facilement redéfinir les touches raccourcies a toutes ces actions. Par exemple dans un jeu dans un jeu on peut souvent redéfinir toutes les touches ou dans une application bureautique ou chaque utilisateur pourrait redéfinir tous les raccourcis clavier des commandes principales. Tandis que quand on code un KeyListener, ben tout est code en dur et donc on peut difficilement changer ce que vont faire les touches activées.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Détecter l'appui sur la touche F5
    Par amine1980 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 02/12/2008, 09h56
  2. Comment détecter l'appui sur une touche hors de l'application ?
    Par freezerhm dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/04/2008, 22h53
  3. Réponses: 2
    Dernier message: 20/03/2006, 18h05
  4. Détecter l'appui sur la touche de fonction F2
    Par titiyo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 18/06/2003, 11h07

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