Bonjour,
une question peut-être pas aussi purement philosophique qu'on pourrait le penser: Comment bien implémenter un Listener ? Je vais illustrer avec un ActionListener mais ma question est valable pour tous les Listener.
La première façons consiste à faire en sorte que la classe que l'on construit implémente ActionListener:
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
 
public class ExempleUn extends ActionListener{
 
    public ExempleUn(){
 
         ...
 
         JButton b1 = new JButton("bouton1");
         b1.setActionCommand("lebouton1");
         b1.addActionListener(this);
 
         JTextField t1 = new JTextField();
         t1.setEctionCommand("lazonetexte1");
         t1.addActionListener(this);
 
         ...     
    }
 
    public void actionPerformed(ActionEvent e){
        String commande = e.getActionCommand();
        if (commande.equals("lebouton1")){
               //faire ce qu'il faut pour répondre un click sur le JButton b1
        }
        else if (commande.equals("lazonetexte1")){
               //faire ce qu'il faut pour répondre à "Entrer" sur le JtextField t1
        }
        else if ...
   }
 
}
Avec un nombre de bouton important, pour peu que les traitements ne soient pas "légers" (plusieurs lignes de code), la méthode actionPerformed devient assez rapidement illisible.

La deuxième solution consiste à utiliser les classes anonymes
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
 
public class ExempleDeux{
 
    public ExempleDeux(){
 
         ...
 
         JButton b1 = new JButton("bouton1");
         b1.setActionCommand("lebouton1");
         b1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                          //faire ce qu'il faut pour répondre un click sur le JButton b1
        }});
 
         JTextField t1 = new JTextField();
         t1.setEctionCommand("lazonetexte1");
         t1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                          //faire ce qu'il faut pour répondre à "Entrer" sur le JtextField t1
        }});
 
         ...     
    }
}
mais il est rarement possible de faire le traitement directement et on fait alors le plus souvent appel à une méthode "dédié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
 
public class ExempleTrois{
 
    public ExempleTrois(){
 
         ...
 
         JButton b1 = new JButton("bouton1");
         b1.setActionCommand("lebouton1");
         b1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                          this.repondreAuBoutonUn();
        }});
 
         JTextField t1 = new JTextField();
         t1.setEctionCommand("lazonetexte1");
         t1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                          this.repondreAuJTextFieldUn();
        }});
        ...     
    }
 
     public void repondreAuBoutonUn(){
               //faire ce qu'il faut pour répondre un click sur le JButton b1
    }
 
     public void repondreAuJTextFieldUn(){
               //faire ce qu'il faut pour répondre à "Entrer" sur le JtextField t1
    }
 
}
Et on peut du coup appliquer le même principe à ce qu'on avait sur l'exemple 1 ce qui rend la méthode actionPerformed un peu plus lisible
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
 
public class ExempleQuatre extends ActionListener{
 
    public ExempleQuatre(){
 
         ...
 
         JButton b1 = new JButton("bouton1");
         b1.setActionCommand("lebouton1");
         b1.addActionListener(this);
 
         JTextField t1 = new JTextField();
         t1.setEctionCommand("lazonetexte1");
         t1.addActionListener(this);
 
         ...     
    }
 
    public void actionPerformed(ActionEvent e){
        String commande = e.getActionCommand();
        if (commande.equals("lebouton1")){
               this.repondreAuBoutonUn();
        }
        else if (commande.equals("lazonetexte1")){
               this.repondreAuJTextFieldUn();
        }
        else if ...
   }
 
    public void repondreAuBoutonUn(){
               //faire ce qu'il faut pour répondre un click sur le JButton b1
    }
 
     public void repondreAuJTextFieldUn(){
               //faire ce qu'il faut pour répondre à "Entrer" sur le JtextField t1
    }
}
Ma question est donc parmis ces 4 méthodes (enfin surtout les deux dernières) laquelle est la meilleure ? Vous allez me répondre meilleure en quelle terme ? Ben justement, c'est un peu la question : les avantages de l'une ou l'autre en différents termes surtout de rapidité, sécurité, intégrité... car ici j'ai surtout vu le coté pratique à écrire (ce qui fit pencher pour la solution 3) mais ce n'est peut etre pas la meilleure sur d'autres critères ?

merci pour vos avis.

Bon code,
kerinel