← (précédent) D.7 Evènements sur les boites de liste
D.9 Evènements sur les boites dialogue
Accueil S O M M A I R E

D.8 Evènements sur les boites combo

La boite combo, encore appelée boite de liste combinée, est l'association d'un champ de texte par défaut non éditable et une boite de liste à sélection unique.

On construit une boite combo grâce à la classe JcomboBox dont le constructeur requiert un argument de type tableau de String. Le tableau contient alors tous les éléments qui doivent apparaître dans la boite.
Par défaut, une boite combo est non éditable. Mais on peut changer ça en utilisant la méthode setEditable() qui requiert un argument de type boolean. La valeur true signifie que la boite est éditable. La valeur false dans le cas contraire.

L'action de choisir un (et un seul) élément de la boite combo est un évènement qu'on traite de 2 façons :

Soit par la métthode actionPerformed() de l'interface ActionListener
Soit par la méthode itemStateChanged() de l'interface ItemListener

On peut aussi exploiter l'information sélectionnée par la méthode getSelectedItem() qui retourne l'élément sélectionné sous forme de variable de type Object. Il faudra alors convertir ce type Object par le type String. Conversion bien entendu explicite.

 Exemple 1 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.    import java.awt.event.*;
4.    import javax.swing.event.*;
5.
6.     class Fenetre extends JFrame implements ActionListener
7.     {
8.            
9.          private JComboBox listeNoms; private JButton bouton; private JLabel etiket;
10.         private String [] noms = { "De GAULLE", "POMPIDOU", "GISCARD", "MITTERAND", "CHIRAC"};
11.         
12.          public Fenetre(String titre)
13.          {
14.               setTitle(titre);
15.               setSize(300, 300);
16.               Container c = getContentPane();
17.               c.setLayout(new FlowLayout() );
18.               setLocationRelativeTo(this.getParent()); 
19.               
20.               listeNoms = new JComboBox(noms);               
21.               c.add(listeNoms);
22.               
23.               etiket = new JLabel("texte initial"); c.add(etiket);
24.               
25.               bouton = new JButton("Bouton de Validation");
26.               bouton.setBackground( new Color(255, 200, 150) );
27.               c.add(bouton);
28.               bouton.addActionListener(this);
29.               
30.           setDefaultCloseOperation(3);   
31.         }
32.         
33.         public void actionPerformed(ActionEvent a)
34.         {
35.              String choix = (String) listeNoms.getSelectedItem();
36.              
37.              etiket.setText(choix); 
38.                   
39.         }         
40.     }   
41.
42.    public class TesterCombo
43.    {
44.          public static void main(String [] args)
45.          {
46.               JFrame f = new Fenetre("essais sur Combo");
47.               f.setVisible(true);
48.          }
49.    }

Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre avec 3 composants. Une boite combo, une étiquette et un bouton de validation. La boite combo contient évidement les 5 noms du tableau de String noms. L'étiquette contient le texte "texte initial". Et le bouton est appelé Bouton de Validation".
Choisissez un nom parmi les 5. Puis cliquez sur le bouton de validation. Aussitôt, le texte de l'étiquette change. Et c'est le nom choisi dans la boite combo.


Explications :

Ligne 20 : on crée une boite combo. Ligne 21 : on ajoute cette boite dans le conteneur. Ligne 23 : on crée une étiquette puis on l'ajoute dans le conteneur.

Ligne 25 : on crée un bouton appelé Bouton de Validation. Ligne 26 : on donne une couleur à ce bouton. Ligne 27 : on ajoute le bouton au conteneur. Ligne 28 : on associe à ce bouton, un objet écouteur de type ActionListener. Et c'est la fenêtre elle même qui est l'objet écouteur.

Dans la méthode actionPerformed(), on définit une variable de type String appelée choix. On y met la référence de l' objet sélectionné. Cet objet de type Object a préalablement été traznsformé en objet de type String. Puis on donne à l'étiquette, le texte correspondant au nom choisi.

Ici, on a juste exploité l'action sur un bouton en tenant compte de l'élément choisi dans la boite combo.

Dans les exemples qui suivent, il y aura une réaction immédiate à l'action de l'utilisateur.
 Exemple 2 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.    import java.awt.event.*;
4.    import javax.swing.event.*;
5.
6.     class Fenetre extends JFrame implements ItemListener
7.     {
8.            
9.          private JComboBox listeNoms; private Container c;
10.         private String [] noms = { "Rouge", "Vert", "Bleu"};
11.         
12.          public Fenetre(String titre)
13.          {
14.               setTitle(titre);
15.               setSize(400, 200);
16.               c = getContentPane();
17.               c.setLayout(new FlowLayout() );
18.               setLocationRelativeTo(this.getParent()); 
19.               
20.              listeNoms = new JComboBox(noms);               
21.              c.add(listeNoms);
22.              listeNoms.addItemListener(this);
23.              
24.              setDefaultCloseOperation(3); 
25.          }     
26.               
27.          public void itemStateChanged(ItemEvent a)   
28.          {    
29.               int position =  listeNoms.getSelectedIndex();
30.               
31.               switch (position)
32.               {
33.                    case 0:
34.                    c.setBackground( new Color(255, 0, 0) );
35.                    break;
36.                    
37.                   case 1:
38.                   c.setBackground( new Color(0, 255, 0) );
39.                   break;
40.                     
41.                  default :
42.                  c.setBackground( new Color(0, 0, 255) );
43.                  break;
44.              }
45.         }         
46.     }   
47.
48.    public class TesterCombo2
49.    {
50.          public static void main(String [] args)
51.          {
52.               JFrame f = new Fenetre("essais sur Combo");
53.               f.setVisible(true);
54.          }
55.    }

Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre avec 1 boite combo contenant les 3 noms Roue, Vert et Bleu. Si vous choisissez une couleur, aussitôt, la fenêtre se colore en la couleur choisie.

Explications :

Observez déjà en ligne 9, la déclaration de l'objet conteneur. C'est normal. Si je déclare le conteneur dans le constructeur de la fenêtre comme d'habitude, il me serait impossible d'utiliser cette variable dans la méthode itemStateChanged(). Question de visibilité. Variable locale et variable globale.

Ligne 22 : j'associe à l'objet JcomboBox (la boite combo listeNoms), l'objet écouteur de type ItemListener. Et c'est la fenêtre elle même qui est l'objet écouteur.

Dans la méthode istemStateChanged(), je déclare une variable position de type int. Puis je lui affecte la valeur correspondant à la position de l'élément sélectionné dans la boite. La méthode getSelectedIndex() permet justement de retourner la position de l'élément sélectionné dans la boite combo.
Puis je crée la structure conditionnelle switch. Dans le cas où cette position est 0 (zéro est toujours la première position dans la boite), et cette position est occupée le nom Rouge, le conteneur est alors coloré en rouge. Je rappelle que les 3 arguments du constructeur de la classe Color représentent respectivement les couleurs Rouge, Vert et Bleu. Chaque couleur étant représentée par un nombre entier qui va de 0 à 255.

Dans le cas où cette position est 1, occupée par le nom Vert, alors, la couleur est verte. Dans le cas où ce n'est ni zéro, ni 1 (default), ce qui veut dire Bleu, alors la fenêtre se colore en bleu. c'est aussi simple que ça.
 Exemple 3 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.    import java.awt.event.*;
4.    import javax.swing.event.*;
5.
6.     class Fenetre extends JFrame
7.     {
8.            
9.          private JComboBox listeNoms; private Container c;
10.         private String [] noms = { "Rouge", "Vert", "Bleu", "Jaune", "Orange", "Noir", "Blanc", "Gris", "Moutarde", "Violet"};
11.         
12.          public Fenetre(String titre)
13.          {
14.               setTitle(titre);
15.               setSize(400, 200);
16.               c = getContentPane();
17.               c.setLayout(new FlowLayout() );
18.               setLocationRelativeTo(this.getParent()); 
19.               
20.              listeNoms = new JComboBox(noms);               
21.              c.add(listeNoms);
22.              listeNoms.setSelectedIndex(3);
23.              
24.              setDefaultCloseOperation(3); 
25.          }     
26.               
27.             
28.     }   
29.
30.    public class TesterCombo3
31.    {
32.          public static void main(String [] args)
33.          {
34.               JFrame f = new Fenetre("essais sur Combo");
35.               f.setVisible(true);
36.          }
37.    }

Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre avec 1 boite combo contenant les 10 noms de couleur. Si vous cliquez sur la boite, les 10 noms apparaissent. Normal. Mais on voit aussi un ascenseur. C'est à dire, le "scroll" qui apparaît dans toutes les fenêtres dès que la quantité des informations dépassent la surface de l'écran. L'ascenseur, qui se trouve à droite de la fenêtre, permet de voit les information vers le bas de la page. Ou alors vers le haut de la page dès qu'on est au bas de la page. Cet ascenseur apprait automatiquement dans une boite combo dès que le nombre d'éléments de la boite est supérieur à 8.

On peut modifier le nombre de valeurs visibles par la méthode setMaximumRowCount() qui requiert un argument de type int. Sa valeur est le nombre d'éléments à partir duquel doit apparaitre l'ascenseur.

 Exemple 4 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.    import java.awt.event.*;
4.    import javax.swing.event.*;
5.
6.     class Fenetre extends JFrame
7.     {
8.            
9.          private JComboBox listeNoms; private Container c;
10.         private String [] noms = { "Rouge", "Vert", "Bleu", "Jaune", "Orange", "Noir", "Blanc", "Gris", "Moutarde", "Violet"};
11.         
12.          public Fenetre(String titre)
13.          {
14.               setTitle(titre);
15.               setSize(400, 200);
16.               c = getContentPane();
17.               c.setLayout(new FlowLayout() );
18.               setLocationRelativeTo(this.getParent()); 
19.               
20.              listeNoms = new JComboBox(noms);               
21.              c.add(listeNoms);
22.              listeNoms.setSelectedIndex(3);
23.              listeNoms.setMaximumRowCount(4);
24.              
25.             
26.               setDefaultCloseOperation(3); 
27.          }     
28.     }   
29.
30.    public class TesterCombo4
31.    {
32.          public static void main(String [] args)
33.          {
34.               JFrame f = new Fenetre("essais sur Combo");
35.               f.setVisible(true);
36.          }
37.    }

Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre avec 1 boite combo contenant les 10 noms de couleur. Si vous cliquez sur la boite, seuls 4 noms apparaissent dans l'ascenseur. Normal, c'est grâce à l'instruction listeNoms.setMaximumRowCount(4); en ligne 23. L'élément numéro est déjà sélectionné. C'est le nom Jaune. Ceci, grâce à l'instruction listeNoms.setSelectedIndex(3); en ligne 22. Et c'est justement cet élément (Jaune) qui est visible.
On peut changer le nombre d'éléments contenus dans une boite combo au cours du programme.

En l'occurence, on peut ajouter un élément à la boite. Eventuellement préciser la position où doit être ajouté l'élément. On peut aussi enlever un élément de la boite.
 Exemple 5 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.    import java.awt.event.*;
4.    import javax.swing.event.*;
5.
6.     class Fenetre extends JFrame
7.     {
8.            
9.          private JComboBox listeNoms; private Container c;
10.         private String [] noms = { "Rouge", "Vert", "Bleu", "Jaune", "Orange", "Noir", "Blanc", "Gris", "Moutarde", "Violet"};
11.         
12.          public Fenetre(String titre)
13.          {
14.               setTitle(titre);
15.               setSize(400, 200);
16.               c = getContentPane();
17.               c.setLayout(new FlowLayout() );
18.               setLocationRelativeTo(this.getParent()); 
19.               
20.              listeNoms = new JComboBox(noms);               
21.              c.add(listeNoms);
22.              listeNoms.setSelectedIndex(3);
23.              listeNoms.setMaximumRowCount(4);
24.              listeNoms.removeItem("Turquoise"); 
25.             
26.               setDefaultCloseOperation(3); 
27.          }     
28.     }   
29.
30.    public class TesterCombo5
31.    {
32.          public static void main(String [] args)
33.          {
34.               JFrame f = new Fenetre("essais sur Combo");
35.               f.setVisible(true);
36.          }
37.    }

Compilez puis exécutez ce programme. Il sera affiché :

La même chose que ci-dessus. En plus de ça, un nouvel élément est ajouté à la fin de la liste. C'est le nom Turquoise. Ceci, grâce à l'instruction listeNoms.addItem("Turquoise"); en ligne 24.

Remplacez l'instruction : listeNoms.addItem("Turquoise"); par l'instruction listeNoms.insertItemAt("Turquoise", 4); . Recompilez puis exécutez. Il sera affiché la même chose que ci-dessus. Avec une petite différence tout de même. Le mot Turquoise se trouve en 4ème position dans la boite.

Remplacez l'instruction : listeNoms.insertItemAt("Turquoise", 4); . par l'instruction : listeNoms.removeItem("Turquoise"); Recompilez puis exécutez. Il sera affiché la même chose que ci-dessus. Avec une petite différence tout de même. Le mot Turquoise a maintenant disparue disparue de la boite combo.
La connaissance, c'est bien. La partager, c'est mieux
Conseiller ce site à un(e) ami(e):

Son e-mail est :       
Une suggestion à faire pour ce site ? ... Contact : webmaster@debutantprog.com
← (précédent) D.7 Evènements sur les boites de liste
D.9 Evènements boites dialogue
Accueil S O M M A I R E

D.8 Evènements sur boites combo