Les combo box


La combo box (classe JComboBox) est un composant permettant de représenter une liste de choix importante de manière très compacte. Lorsqu'elle est non déployée, elle prend la même place qu'un champ de texte. Voici, une combo box non déployée:

ComboBoxNonDeployee.jpg, 2,9kB

Elle ne se déploie que lorsque l'utilisateur l'utilise pour sélectionner un choix. De plus, si le nombre de choix est important, une barre de défilement verticale permet d'atteindre des choix non visibles au moment du déploiement. Voici la combo box précédente sous forme déployée:

ComboBoxDeployee.jpg, 16kB

Sélection dans la palette

ComboBoxDsPalette.jpg, 54kB


Coté design

Pour définir les entrées d'une combo box à la main, utilisez la propriété model. En cliquant sur les ... à droite de la propriété vous ouvrez un éditeur qui vous permet de saisir les intitulés des différents choix.

Gestionnaire d'évènement

Le fait de sélectionner une entrée dans une combo box génère un évènement de type ActionPerformed. Pour définir un gestionnaire pour cet évènement, faites un double clic sur la combo box. Le nom de la procédure évènementielle générée par NetBeans est composé du nom de la combo box suivi de ActionPerformed.

Méthodes utiles

Attention: toutes les méthodes modifiant l'état de la combo box, génèrent un évènement de type ActionPerformed! Dans les exercices, nous verrons comment contourner ce problème.

Exemple

L'exemple présenté ici se trouve dans le dossier Exemple-Swing/ComboBox. Il s'agit d'une application permettant de sélectionner des produits dans un magasin de bricolage.

Dans cet exemple, nous ne verrons quelques unes des méthodes précédentes. Par contre, elles seront toutes utilisées dans l'exercice portant sur la réalisation d'un dictionnaire illustré.

Fenêtre du projet
MagasinBrico.jpg, 21kB

La fenêtre comprend deux combo box nommées CB_Categorie et CB_Produit, un bouton et un champ de texte nommé CT_Produit.

Extraits de code

Lorsque l'utilisateur sélectionne une entrée de la combo box "Catégories", tous les produits de cette catégories sont affichés dans la combo box produit. Voici la procédure évènementielle correspondante:

private void CB_CategorieActionPerformed(...) {                                             
   
   int Categorie = CB_Categorie.getSelectedIndex();
    
    CB_Produit.removeAllItems();
     
     switch (Categorie)
     {
       case 0: // Electricité    
        CB_Produit.addItem("Ampoule");
        CB_Produit.addItem("Cable");
        .
        .
        break;
       case 1: // Jardinage
        CB_Produit.addItem("Pelle");
        CB_Produit.addItem("Rateau");
        .
        .
        break;
        .
        .

On récupère tout d'abord la position de la catégorie sélectionnée à l'aide de getSelectedIndex. Le contenu de la combo box est ensuite vidé à l'aide de removeAllItems. Puis les produits de la catégorie correspondante sont ajoutés à la combo box avec la méthode addItem.

Lorsque l'utilisateur clique sur le bouton "Commander", le produit sélectionné s'affiche dans le champ de texte. Cette action est exécutée par la procédure évènementielle suivante:

private void BT_CommanderActionPerformed(...) {                                             
      String Produit = CB_Produit.getSelectedItem().toString();
      CT_Produit.setText(Produit); 
}  

Le produit sélectionné est récupéré via la méthode getSelectedItem. Comme elle retourne une référence à un objet (représentant l'entrée sélectionnée), il est nécessaire de convertir cette référence en une référence à une chaine de caractères avec toString.