Synchronisation de JComboBox

Fermé
Vivien - 23 avril 2013 à 21:31
 Vivien - 24 avril 2013 à 08:48
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

KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
23 avril 2013 à 22:16
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
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
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
Modifié par KX le 23/04/2013 à 22:46
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
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
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
23 avril 2013 à 23:15
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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