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

Composants Java Discussion :

Associer une touche clavier à un bouton


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Associer une touche clavier à un bouton
    Bonjour,

    J'ai une JList dans laquelle il y a des éléments et au dessous un bouton "Supprimer" qui me permet de supprimer l'élément sélectionné. Vous l'aurez compris je cherche à associer à ce bouton la touche "Suppr" du clavier. Le bouton fonctionne bien.
    Voici mon actionPerformed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void actionPerformed (ActionEvent oEvent) 
    	{
    		Object oSource = oEvent.getSource ();
    		if (oSource == __oButtonSave)__onButtonSaveClick (oEvent);
    		else if (oSource == __oButtonSaveAs)__onButtonSaveAsClick (oEvent);
    		else if (oSource == __oButtonClearProfile)__onButtonClearProfileClick (oEvent);	
    		else if (oSource == __oButtonConnect)__onButtonConnectClick (oEvent);
    		else if (oSource == __oButtonCancel)__onButtonCancelClick (oEvent);
    	}
    La méthode du bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void __onButtonClearProfileClick (ActionEvent oEvent)
    	{
    		__oProfileList.removeProfileEntry (__oProfileList.getSelectedValue ());
    Merci de vos réponses. J'ai essayé certaines choses mais je m'y perd un peu entre KeyListener, KeyStroke, KeyEvent, sans parler de créer un Map, ce qui me semble assez compliqué pour juste intercepter une touche et qu'elle réalise la même action qu'un bouton.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    C'est a la JList que tu dois ajouter un intercepteur pour le clavier et non au bouton. (qui appellera ce qu'appelle le bouton).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Ca me semble plus logique en effet, mais je ne vois pas trop comment m'y prendre, et les tutos genre how tu use d'oracle ne m'ont pas aidé...

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Bah comme pour tout les composants swing, il y à la méthode AddKeyListener et la classe réceptrice doit implémentée KeyListener.

    Sinon voire ceci peut être cela te parlera.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    Une autre solution avec setMnemonic(). Il faut alors appuyer sur alt + la touche désirée. Mais ça fonctionne bien.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
    public class TestMnemonic extends JFrame implements ActionListener{
     
    	JPanel panel1 = new JPanel();
    	JButton bouton1 = new JButton("Bouton");
    	DefaultListModel dlm;
    	JList list;
     
    	public TestMnemonic(){	
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(500,200);
    		panel1.setPreferredSize(new Dimension(500,200));
    		panel1.add(bouton1);
    		JLabel label = new JLabel("Appuyer sur le bouton ou sur alt B pour effacer l'objet selectionne dans la liste");
    		panel1.add(label);
    		dlm = new DefaultListModel();
    		for (int i=0;i<5;i++) 
    			dlm.addElement(new Integer(i));
    		list = new JList(dlm);
    		list.setPreferredSize(new Dimension(100,100));
    		panel1.add(list);
    		bouton1.addActionListener(this);
    		bouton1.setMnemonic(KeyEvent.VK_B);
    		add(panel1);
    		setVisible(true);
    	}
     
     
    	public static void main(String[] args) {
    		TestMnemonic ff = new TestMnemonic();
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		dlm.removeElementAt(list.getSelectedIndex());
    	}
    }

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    J'avais déjà regarder ce tuto. J'ai implémenté ma classe de l'interface KeyListener, ajouté les 3 méthodes KeyEvent associée (keyTyped, keyPressed et keyReleased). J'ai mis la méthode qui éxécute l'action sur le bouton dans KeyPressed. Je ne penses pas que ce soit nécessaire de coder les 2 autres méthodes ?
    Ensuite je suis désolé mais je n'ai pas beaucoup de pratique de JAVA, ni de développement donc ça peut paraitre facile pour toi, mais moi je m'arrache les cheveux

    Il me faut maintenant dire quelque part et je ne sais ou, que c'est sur la touche Suppr. que je veux que cette action se fasse. Je sais déjà que quelque part j'ai KeyEvent.VK_DELETE à mettre (que j'ai récup dans la javadoc de Class KeyEvent). Et c'est la ou je suis perdu.

    Je pensais faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaJList.getKeyListeners (KeyStroke.getKeyStroke (KeyEvent.VK_DELETE,  + JE SAIS PAS QUOI);
    Mais je patauge et je ne vois pas ou rappeler ma méthode KeyPressed dans tout ça. J'ai cherché mais la je suis bloqué depuis un moment la dessus...

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Essaies ma methode qui est plus simple,

    Dans mon exemple, tu pourras effacer les objets de la liste en appuyant sur alt B


    sinon autre solution comme celle proposée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
     
     
    public class TestMnemonic extends JFrame implements ActionListener,KeyListener{
     
    	JPanel panel1 = new JPanel();
    	JButton bouton1 = new JButton("Bouton");
    	DefaultListModel dlm;
    	JList list;
     
    	public TestMnemonic(){	
     
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setSize(500,200);
    		panel1.setPreferredSize(new Dimension(500,200));
    		panel1.add(bouton1);
    		JLabel label = new JLabel("Appuyer sur le bouton ou sur alt B pour effacer l'objet selectionne dans la liste");
    		panel1.add(label);
    		dlm = new DefaultListModel();
    		for (int i=0;i<5;i++) 
    			dlm.addElement(new Integer(i));
    		list = new JList(dlm);
    		list.setPreferredSize(new Dimension(100,100));
    		list.addKeyListener(this);
    		panel1.add(list);
    		bouton1.addActionListener(this);
    		add(panel1);
    		setVisible(true);
    	}
     
     
    	public static void main(String[] args) {
    		TestMnemonic ff = new TestMnemonic();
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		dlm.removeElementAt(list.getSelectedIndex());
    	}
     
    	public void keyPressed(KeyEvent e) {
    		if (e.getKeyCode() == KeyEvent.VK_S)
    			bouton1.doClick();
    	}
    	public void keyReleased(KeyEvent e) {
     
    	}
    	public void keyTyped(KeyEvent e) {
     
    	}
    }

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Bon ben je vais faire ça alors, merci

  9. #9
    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
    Ou plus simplement utiliser le concept d'InputMap/ActionMap (dans ton cas celui de ta JList) qui est recommandé pour tout ce qui est binding.

    Tu commences par créer une classe héritant d'AbstractAction réalisant l'action attendue (en fait, l'actionPerformed de ton JButton finira dans cette classe).


    Puis, tu fais un setAction sur ton JButton avec cette classe.

    Puis tu ajoutes cette classe dans le key binding de ta JList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyAction action = new MyAction();
    myButton.setAction(action);
    myList.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "doSomething");
    myList.getActionMap().put("doSomething",action);
    Et ce sera bon.

    cf http://docs.oracle.com/javase/tutori...eybinding.html

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

Discussions similaires

  1. [Débutant] Associer une touche à un bouton
    Par Bencici dans le forum VB.NET
    Réponses: 14
    Dernier message: 03/06/2012, 16h01
  2. [Débutant] Associer un bouton du gui avec une touche clavier
    Par gc001 dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 20/04/2012, 14h56
  3. Associer une touche clavier à un ImageButton
    Par baldebaran dans le forum C#
    Réponses: 2
    Dernier message: 09/04/2009, 10h26
  4. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23

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