Synchronisation de JComboBox

Vivien -  
 Vivien -
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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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...
    0
  2. Vivien
     
    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
    0
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    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);
        }
    }
    0
  4. Vivien
     
    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
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Vivien
     
    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
    0