IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Problème Synchronisation JComboBox


Sujet :

Composants Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 345
    Points : 103
    Points
    103
    Par défaut Problème Synchronisation 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.

    Cependant, si une valeur est relaché, elle doit être injecté à nouveau dans toutes les JCombobox

    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,

    Italia57

  2. #2
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Salut !
    Dis-nous d'abord en deux mots quel est le but de ce dispositif...
    Il y a peut-être d'autres façons de le faire.

  3. #3
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par italia57 Voir le message
    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 differentes
    Italia57
    Bonjour,
    Tu vas dans l'événement PopupMenu de chacune de tes jComboBox, tu choisis la méthode popupMenuWillBecomeInvisible, tu insères ensuite les codes suivants:

    Pour la première jComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combo2.removeItem(combo1.getSelectedItem());
     combo3.removeItem(combo1.getSelectedItem());
     combo4.removeItem(combo1.getSelectedItem());
    Pour la deuxième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combo1.removeItem(combo2.getSelectedItem());
     combo3.removeItem(combo2.getSelectedItem());
     combo4.removeItem(combo2.getSelectedItem());
    Pour la troisième:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combo2.removeItem(combo3.getSelectedItem());
     combo1.removeItem(combo3.getSelectedItem());
     combo4.removeItem(combo3.getSelectedItem());
    Et pour la dernière combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    combo2.removeItem(combo4.getSelectedItem());
     combo3.removeItem(combo4.getSelectedItem());
     combo1.removeItem(combo4.getSelectedItem());
    Bonne chance...
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  4. #4
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Je te propose ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public static final String ROUGE = "rouge";
    public static final String VERT = "vert";
    public static final String BLEU = "bleu";
    public static final String JAUNE = "jaune";
     
    private String[] itemList = new String[]{ ROUGE, VERT, BLEU, JAUNE };
     
    JComboBox combo1 = new JComboBox( itemList );
    JComboBox combo2 = new JComboBox( itemList );
    JComboBox combo3 = new JComboBox( itemList );
    JComboBox combo4 = new JComboBox( itemList );
     
     
    combo1.addItemListener(new ItemListener () {
     
    	@Override
    	public void itemStateChanged(ItemEvent e)
    	{
    		String item = (String)e.getItem();
     
                    // Si on sélectionne un item
    		if (e.getStateChange() == ItemEvent.SELECTED) 
    		{
    			combo2.removeItem(item); // On enlève des autres combo
    			combo3.removeItem(item);
    			combo4.removeItem(item);
    		}
    		else // Au moment de la dé-sélection de l'item
    		{
    			combo2.addItem(item);  // On remet dans les autres combo
    			combo3.addItem(item);
    			combo4.addItem(item);
    		}
    	}
    });
     
    // Pareil pour les 3 autres
    Tu pourrais aussi factoriser l'ajout et la suppression dans des fonctions pour éviter de trop surcharger ton code.

    Cdt.

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Pour ma part, je préfère un code basé sur le fonctionnement des modèles, beaucoup plus orienté objet et extensible "à l'infini" très facilement.
    Avec cette exemple, ajouter un item dans la liste se résume à ajouter une seule ligne de code.
    De même, ajouter un seul comboBox signifie ajouter une seule ligne de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    import java.awt.GridLayout;
    import java.util.ArrayList;
     
    import javax.swing.ComboBoxModel;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.event.ListDataListener;
     
     
    public class ComboExclusif
    {
    	public static void main( String arg[] )
    	{
    		ArrayList<MonItem> liste = new ArrayList<MonItem>();
    		liste.add( new MonItem( "1. coucou" ) );
    		liste.add( new MonItem( "2. salut" ) );
    		liste.add( new MonItem( "3. bonjour" ) );
    		liste.add( new MonItem( "4. hello" ) );
    		liste.add( new MonItem( "5. bye" ) );
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    		frame.getContentPane().setLayout( new FlowLayout() );
    		frame.getContentPane().add( new JComboBox<MonItem>( new MonModel( liste ) ) );
    		frame.getContentPane().add( new JComboBox<MonItem>( new MonModel( liste ) ) );
    		frame.getContentPane().add( new JComboBox<MonItem>( new MonModel( liste ) ) );
    		frame.getContentPane().add( new JComboBox<MonItem>( new MonModel( liste ) ) );
    		frame.pack();
    		frame.setVisible( true );
    	}
     
    	public static class MonModel implements ComboBoxModel<MonItem>
    	{
    		private ArrayList<MonItem> liste;
    		private MonItem selection = null;
     
    		public MonModel( ArrayList<MonItem> liste ) { this.liste = liste; }
     
    		@Override
    		public Object getSelectedItem() { return selection; }
     
    		@Override
    		public void setSelectedItem( Object arg )
    		{
    			if( selection != null ) { selection.is_selectable = true; }
    			selection = (MonItem)arg;
    			if( selection != null ) { selection.is_selectable = false; }
    		}
     
    		@Override
    		public void addListDataListener( ListDataListener arg0 ) {}
     
    		@Override
    		public MonItem getElementAt( int index )
    		{
    			if( index == 0 ) { return null; }
    			--index;
     
    			for( MonItem item : liste )
    			{
    				if( item.is_selectable )
    				{
    					if( index == 0 ) { return item; }
    					else { --index; }
    				}
    			}
     
    			return null;
    		}
     
    		@Override
    		public int getSize()
    		{
    			int taille = 0;
    			for( MonItem item : liste ) { if( item.is_selectable ) { ++taille; } }
    			return taille + 1;
    		}
     
    		@Override
    		public void removeListDataListener( ListDataListener arg0 ) {}
    	}
     
    	public static class MonItem
    	{
    		private String nom;
    		private boolean is_selectable;
     
    		public MonItem( String nom )
    		{
    			this.nom = nom;
    			is_selectable = true;
    		}
     
    		@Override
    		public String toString() { return nom; }
    	}
    }
    Le principe : on utilise une liste unique d'objets "MonItem", partagée entre tous les modèles des combobox. Un objet MonItem porte lui-même son caractère sélectionnable ou non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Pour ma part, je préfère un code basé sur le fonctionnement des modèles, beaucoup plus orienté objet et extensible "à l'infini" très facilement.
    Peut être un peu moins compréhensible pour un débutant

    Mais j'aime bien l'idée

Discussions similaires

  1. Problème synchronisation JCombobox
    Par pololetigrou dans le forum Composants
    Réponses: 2
    Dernier message: 23/07/2009, 11h22
  2. problème avec JComboBox
    Par ulysse031 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 22/04/2007, 16h51
  3. [THREAD] Problème synchronisation
    Par goddet dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/10/2006, 09h16
  4. Problème synchronisation base: START SLAVE
    Par Carter dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 21/09/2006, 10h19
  5. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo