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 :

[JButton] ActionListenner, ActionPerformed


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 19
    Points : 11
    Points
    11
    Par défaut [JButton] ActionListenner, ActionPerformed
    Bonjour, j'ai un petit soucis avec le ActionListenner.
    Je reprends actuellement un code existant (que je ne maitrise pas totalement). Il s'agit d'une appli Java visuel (JFrame), et lorsque dans cette appli j'ajoute une nouvelle fenetre l'ActionListenner ne fonctionne pas correctement, je m'explique.
    Voici un bout de code simple que j'aimerai inserer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* choix couleur */
    	JButton	colorButton = new JButton("Couleur");
    	panelM.add(colorButton) ;
    	colorButton.addActionListener(this) ;
    ....
    ....
    ....
    public void actionPerformed (ActionEvent e)
    { 
         if (e.getSource() == m_colorButton)
    	System.out.println("Ca passe"); 
    }
    Bien si je fais cela le click sur mon bouton est completement ignoré, en regardant le code de plus pres, j'ai vu qu'ils utilisaient cette facon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ButEnd = new JButton();
          ButEnd.setActionCommand(endString);
          ButEnd.addActionListener(this);
    .....
    .....
    .....
    public void actionPerformed(ActionEvent e)
    {
        String str = e.getActionCommand();
        if (str.equals(endString))
          {....}
    }
    Qqun peut il m'éclairer sur cette facon de faire, et si c'est normal que ma premiere solution ne fonctionne pas ?

    Merci bien.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Voici la manière dont j'implémente un JButton (extrait de l'un de mes prog) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    callback(evt);
                }
            });
     
    private void callback(java.awt.event.ActionEvent evt) {
            //Traitement de données
        }
    J'espère que ça t'aidera.

    @ ++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    iuz
    iuz est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 114
    Points : 110
    Points
    110
    Par défaut
    On ne compare pas des objets avec == mais equals()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void actionPerformed (ActionEvent e) 
    { 
       if (e.getSource().equals(m_colorButton))
         System.out.println("Ca passe"); 
    }
    Là ça devrait passer. Mais le mieux c'est de passer par actionCommand ou d'utiliser la méthode de GLDavid

  4. #4
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    La normalement ca devrait marcher, t'avais juste une petite erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /* choix couleur */ 
       JButton   colorButton = new JButton("Couleur"); 
       panelM.add(colorButton) ; 
       colorButton.addActionListener(this) ; 
    .... 
    .... 
    .... 
    public void actionPerformed (ActionEvent e) 
    { 
         if (e.getSource() == colorButton) //colorButton et pas m_colorButton
       System.out.println("Ca passe"); 
    }
    En ce qui concerne la difference entre la premiere et la seconde solution :
    Dans la premiere:
    Tu utilise pour savoir d'ou vien l'action, la fonction e.getSource(). Donc tu fais un test sur l'objet correspondant à l'action.
    Dans la seconde :
    Il associe un string au bouton par la methode setActionCommand. Donc son test ne se fait plus sur l'objet ayant entrainé l'action mais sur le String representant cet objet. e.getActionCommand(), il recupere le string associé au bouton.
    L'interet de cette methode est de pouvoir associé la même action à differents boutons en leur associant la même String à chacun. De plus lors du test pour savoir qui a engendré l'action, c'est plus lisible de reconnaitre un String representant la commande que de reconnaitre un objet boutton.

    Voila dans les grandes lignes la différences entre les 2, en esperant avoir ete clair
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  5. #5
    Membre actif
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Points : 252
    Points
    252
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        JButton   colorButton = new JButton("Couleur"); 
     
        colorButton .addActionListener(new ActionListener() 
          { 
                   public void actionPerformed(ActionEvent e) 
             { 
                 System.out.println("Ca passe --- avant le if "); 
                    if (e.getSource() == m_colorButton) 
       System.out.println("Ca passe"); 
    } 
              });
    ;-) cordialement

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par iuz
    On ne compare pas des objets avec == mais equals()[code]
    Ca passe trés bien avec un == pour la comparaison de ces 2 boutons. Mais t'as raison, c'est plus propre de passer par des equals() pour la comparaison d'objet entre eux.
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci bcp pour votre aide, c'est un plaisir d'en apprendre un peu plus chaque jour

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/04/2014, 04h54
  2. [JButton] ActionListenner, ActionPerformed
    Par dalydh dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 21/04/2013, 22h30
  3. Réponses: 1
    Dernier message: 04/12/2009, 20h32
  4. [ActionListener] JButton et actionPerformed
    Par Leoxp dans le forum Applets
    Réponses: 6
    Dernier message: 21/11/2008, 11h02
  5. [JButton] Aide pour actionPerformed
    Par margou dans le forum Composants
    Réponses: 14
    Dernier message: 16/06/2008, 20h53

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