Synchronisation de JComboBox

Bonjour,

je me tourne vers vous, car après de multiples tentatives et de multiples recherches, je ne trouve pas la solution à mon problème.

Je dispose de 4 JComboBox chacun avec 4 couleurs (Bleu, Vert, Jaune, Rouge).

Je souhaiterais, lorsque je sélectionne une couleur dans l'une des 4 JComboBox qu'elle ne soit plus présente dans les 3 autres etc... De telle manière à ne pas pouvoir sélectionner deux fois la même couleur sur 2 JComboBox différentes.

J'ai tenté avec des ComboBoxModel, avec ItemSelected, etc... Rien à faire j'y arrive pas.

Merci de me mettre sur la piste, car je ne vois vraiment pas.

Merci d'avance pour votre aide

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Franchement, j'ai essayé en partant de ta solution et je n'y arrive pas. Je vais changer de façon de faire même si c'est moins propre. Quand il cliquera sur la bouton commencer je vérifierais que les couleurs sont différentes...

    Merci encore
    1. Merci beaucoup, je vais donc tenter de résoudre le problème restant, dans le cas ou l'on reviendrais à "Choisir Couleur" pour réinjecter la couleur libéré dans l'autre liste.

      Pas évident, vu que moi j'ai 4 comboBox différentes (nom différent) que je ne crée dans pas dans une boucle.

      Merci beaucoup
      1. Modérateur
        La boucle n'est pas le point le plus important mais tu vois bien que c'est tout de suite plus simple parce qu'il y a beaucoup de choses identiques à faire pour tous les JComboBox...
    2. Modérateur
      Voici une idée de base, mais il faudrait creuser parce qu'il y a quelques bugs...

      import java.awt.GridLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      import javax.swing.JComboBox;
      import javax.swing.JFrame;
      
      
      public class QuatreCouleurs
      {
          public static void main(String[] args)
          {
              final int n=4;
              String[] color = {"Choisir la couleur", "rouge", "vert", "bleu", "jaune"};
              
              JFrame frame = new JFrame();
              frame.setLayout(new GridLayout(1,n));
              frame.setSize(n*130, 75);
              
              final ArrayList<JComboBox<String>> comboArray = new ArrayList<JComboBox<String>>(n);
              
              for (int i=0; i<n; i++)
              {
                  final List<String> list = Arrays.asList(color);
                  
                  final JComboBox<String> combo = new JComboBox<String>();
                  for (String str : color)
                      combo.addItem(str);
                  
                  combo.addActionListener(new ActionListener()
                  {
                      @Override
                      public void actionPerformed(ActionEvent e)
                      {
                          String s = (String) combo.getSelectedItem();
                          for (JComboBox c : comboArray)
                              if (c!=combo)
                                  c.removeItem(s);
                      }
                  });
                  
                  comboArray.add(combo);            
                  frame.add(combo);
              }
              
              frame.setVisible(true);
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          }
      }
      1. Tout d'abord, merci pour ta réponse

        J'ai pas oublié de spécifier, mais j'ai une valeur commune à chaque JComboBox qui est "Choisir couleur", mais je n'y arrive tout de même pas. C'est pas faute d'avoir essayer.

        Si je choisi donc Jaune la 3ème il faut que jaune n'apparaissent ni dans la 1ère, ni dans la 2ème ni dans le 4ème. Cependant si je repasse la 3ème comboBox sur "Choisir Couleur", Jaune doit réapparaître dans les autres ComBoBox.

        Je ne vois vraiment pas comment faire. C'est vraiment comment le coder qui me pose problème, la modélisation du problème je l'ai bien saisie.
        Merci encore
        1. Modérateur
          4 couleurs pour 4 JComboBox c'est compliqué, il faudrait autoriser une 5è couleur par défaut pour pouvoir toujours changer de choix (et avoir une valeur de départ)

          Exemple d'évolution (en haut en majuscule le choix sélectionné, en dessous les choix restants)

          Etat initial
          
           GRIS  GRIS  GRIS  GRIS
          ----- ----- ----- -----
          rouge rouge rouge rouge
           vert  vert  vert  vert
           bleu  bleu  bleu  bleu
          jaune jaune jaune jaune
          
          Première sélection
          
          ROUGE  GRIS  GRIS  GRIS
          ----- ----- ----- -----
           gris                  
           vert  vert  vert  vert
           bleu  bleu  bleu  bleu
          jaune jaune jaune jaune
          
          ROUGE  VERT  GRIS  GRIS
          ----- ----- ----- -----
           gris                  
                 gris            
           bleu  bleu  bleu  bleu
          jaune jaune jaune jaune
          
          ROUGE  VERT JAUNE  GRIS
          ----- ----- ----- -----
           gris                  
                 gris            
           bleu  bleu  bleu  bleu
                       gris      
          
          ROUGE  VERT JAUNE  BLEU
          ----- ----- ----- -----
           gris                  
                 gris            
                             gris
                       gris      
          
          Changement de sélection
          
          ROUGE  GRIS JAUNE  BLEU
          ----- ----- ----- -----
           gris                  
           vert  vert  vert  vert
                             gris
                       gris      
          
           VERT  GRIS JAUNE  BLEU
          ----- ----- ----- -----
          rouge rouge rouge rouge
           gris                  
                             gris
                       gris      
          
           VERT ROUGE JAUNE  BLEU
          ----- ----- ----- -----
                 gris            
           gris                  
                             gris
                       gris      

          En partant de cette idée de 5è couleur rémanente, ça devrait te débloquer...