Listener sur un bouton [Résolu]

Messages postés
62
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
22 septembre 2009
- - Dernière réponse : Vlatiss
Messages postés
62
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
22 septembre 2009
- 20 juil. 2009 à 15:00
Bonjour,
J'ai un soucis avec un listener sur un bouton.
Pour simplifier mon problème:j'ai 3 vues, nous les appellerons vue A, vue B et vue C.
Dans la vue A j'ai un bouton de style push et une table. Dans les deux autres j'ai des arbres.

Dans la vue A j'ai un listener sur la table qui permet de mettre à jour les arbres des vues B et C. Mon problème et que je souhaiterais, lorsque j'appuie sur le bouton de la vue A, agir sur les vues B et C (afin de vider mes arbres).
Voici comment je procédais pour placer le listener sur la table de la vue A.

table.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {

...

setSelection(new StructuredSelection(Object));

}
});


getSite().setSelectionProvider(this);


Si quelqu'un pouvait m'aiguiller un peu ça serait sympa. je ne vois pas comment ajouter un nouveau listener.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
82
3
Merci
Salut,

Tu l'ajoutes de la même façon (qui n'est pas optimale que ce soit niveau lisibilité ou niveau performance, soit dit en passant, mais le soucis n'est pas là), je ne vois pas où est le problème...

tonBouton.AddActionListener(new ActionListener{...});
______________________________________
DarK Sidious

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
62
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
22 septembre 2009
3
Merci
C'est ce que j'ai essayer de faire:

searchButton.addSelectionListener(new SelectionAdapter() {

@Override
public void widgetSelected(SelectionEvent e) {

boolean erase=true;		
setSelection(new StructuredSelection(erase));
erase = false;
}
});


Mais comment le récupérer dans l'autre vue? Si je procéde la même manière que celui qui est sur la table ça n'aboutit à rien.
Qu'entends tu par "optimal". Quelle façon serait plus adapter pour ajouter les listeners?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Vlatiss
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
82
3
Merci
Salut,

Et bien si tu appelle le setSelection comme cà, ca s'applique à la classe courante. Si tu veux l'appliquer à une autre classe, il faut utiliser l'instance de la classe en question. Soit dans ton cas, l'appliquer sur les instances des classes B et C.


Par optimal voilà ca que je voulais dire :
1/ Pour des raisons de performances : tu créer une nouvelle instance de listener pour chaque contrôle ! Donc si tu as 100 contrôles par exemple, tu auras 100 listeners de crée, avec autant de listener en écoute en même temps...

Pour que ca soit plus optimal tu fais implémenter ta classe contenant le contrôle du listener en question :
class Fenetre implements ActionListener {
  protected static final String NOM_BOUTON = "bouton";
  JButton button;
  public Fenetre() {
    button = new JButton();
    button.setName(NOM_BOUTON);
    button.addActionListener(this); // ainsi qu'une seule instance du listener
  }

  public void actionPerformed(ActionEvent event) {
    if (NOM_BOUTON.equals(event.getSource().getName()) {
      // traitement pour le click du bouton
    }
  }
}


C'est déjà plus simple à lire et surtout, plus optimisé.

2/ Pour des raisons de lisibilités, je te conseille d'utiliser une classe interne pour cà : comme cà tu découpe ton code en une partie pour la création de l'interface, et une partie pour la gestion des événements :
class Fenetre {
  protected static final String NOM_BOUTON = "bouton";
  JButton button;

  ActionListener actionListener;

  public Fenetre() {
    actionListener = new BoutonListener();
    // ici le code de création de l'interface
    button = new JButton();
    button.setName(NOM_BOUTON);
    button.addActionListener(actionListener);
  }
  
  // ici les classes pour les traîtements des événements : une seule classe par type de listener bien entendu
  class BoutonListener {
    public void actionPerformed(ActionEvent event) {
      if (NOM_BOUTON.equals(event.getSource().getName()) {
        // traitement pour le click du bouton
      }
    }
  }
}


C'est plus long à taper, je te l'accorde (bien qu'avec un eclipse bien configuré, tu peux tout générer avec 2 raccourcis), mais c'est bien plus lisibles, bien plus maintenables, et bien plus optimisé.
Voir ma source de wordart pour un exemple concret.
______________________________________
DarK Sidious

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
62
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
22 septembre 2009
3
Merci
Merci pour ces explications, je vais me plonger de nouveau dans mon code avec cette aide en plus.
Encore merci.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Vlatiss
Messages postés
62
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
22 septembre 2009
3
Merci
RESOLU.
Merci Darksidious

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Vlatiss