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

Java Discussion :

Synchronisation de deux JComboBox, vue-Controller


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Par défaut Synchronisation de deux JComboBox, vue-Controller
    Bonjour à tous,
    voila, je rencontre un petit souci, car je n'arrive pas à synchroniser les affichages de deux JComboBox.
    Je développe une application de gestion Java/sql server dont l'interface présente 2 combobox, le premier pour la sélection d'un "site" et le second pour la sélection des (de l') affaire(s) concernées.
    Pour illustrer comment j'aimerais pouvoir faire fonctionner mes JCombobox, voici 2 classes "factices" mais qui correspondent au fonctionnement que je voudrais obtenir.
    D'abord ma classe TestFrame
    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
    import java.awt.Container;
    import java.awt.GridLayout;
     
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
     
    public class TestFrame {
    	private static Integer[] choix1={1};
     
    	/**
             * @param args
             */
    	public TestFrame(){
     
    	}
    	 /*class Beta extends Thread{
    		JComboBox chooseAff;
    		Beta(JComboBox chooseAff){
    			this.chooseAff= chooseAff;
    			//this.chooseAff.addActionListener(l)
    			this.start();
    		}
    		public void run(){
    			while(true){
    				try {
    					Thread.sleep(500);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				chooseAff= new JComboBox(getChoix1());
     
    			}
    		}
    	}*/
    	public static void createAndShowGui(){
    		JFrame frame = new JFrame("Base PAC");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Display the MenuBar
    		Container content;
    		content= frame.getContentPane();
    		content.setLayout(new GridLayout(2,2));
    		JLabel affCombo=new JLabel("SITES");
    		content.add(affCombo);
    		String[] listeSites= {"pardi", "monster", "seven", "vista"};
    	    JComboBox chooseSite= new JComboBox(listeSites);
    	    Cont cont= new Cont();// instanciation du contrôleur
    	    chooseSite.setActionCommand("site");
    	    chooseSite.addActionListener(cont);
    	    content.add(chooseSite);
    	    JLabel nameAff= new JLabel("Affaires associées:");
    	    content.add(nameAff);
    	    JComboBox chooseAff=new JComboBox(choix1);
    	    chooseAff.setVisible(true);
    		chooseAff.setActionCommand("chooseAffaire");
    		chooseAff.addActionListener(cont);
    		//TestFrame tF= new TestFrame();
    		//Beta b= tF.new Beta(chooseAff);
    		content.add(chooseAff);
     
    	    //Display the window.
            frame.setSize(1024,768);
            frame.setVisible(true);
    		frame.pack();
    	}
    	public static Integer[] getChoix1() {
    		return choix1;
    	}
    	public static void setChoix1(Integer[] choix1) {
    		TestFrame.choix1 = choix1;
    	}
     
    	public static void main(String[] args) {
    		createAndShowGui();
     
    	}
     
    }
    Et voici ma classe Cont(pour controler...excusez la pauvreté du choix des noms...
    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JComboBox;
     
     
    public class Cont implements ActionListener {
     
    	private Integer[] choix2={1,2};
    	private Integer[] choix3={1,2,3};
    	private Integer[] choix4={1,2,3,4};
    	private Integer[] choix5={1,2,3,4,5};
    	public void actionPerformed(ActionEvent e) {
    		if (e.getActionCommand()=="Site"){
    			JComboBox cb= (JComboBox)e.getSource(); 
    			String siteName=(String) cb.getSelectedItem();
    			if (siteName =="pardi"){
    				TestFrame.setChoix1(choix2);
    			}
    			else if(siteName =="monster"){
    				TestFrame.setChoix1(choix3);
    			}
    			else if(siteName == "seven"){
    				TestFrame.setChoix1(choix4);
    			}
    			else if(siteName== "vista"){
    				TestFrame.setChoix1(choix5);
    			}
    		}
    		else if (e.getActionCommand()== "chooseAff"){
    			System.out.println("Enfin ça fonctionne");
    		}
     
     
    	}
    Mon problème est que le second combobox ne varie pas en fonction de la sélection du premier. J'ai pensé bien évidemment à la solution des threads, mais je sais pas si je m'y prend mal, en tout cas ça marche toujours pas.
    Si vous avez des propositions...je vous remercie

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par cedy-kassy Voir le message
    Mon problème est que le second combobox ne varie pas en fonction de la sélection du premier. J'ai pensé bien évidemment à la solution des threads, mais je sais pas si je m'y prend mal, en tout cas ça marche toujours pas.
    Passer par des threads ne changera rien, au contraire. Dans l'action listener, tu es dans le contexte de l'EDT (le thread qui s'occupe de l'ihm) et c'est dans celui-ci qu'il faut modifier le contenu du second combo.
    Il faudrait voir le code qui est reellement utilisé mais je suspecte que le probleme vient de la maniere de remplir le second combo. Changer la variable qui a servi a initialiser le contenu du combo ne sert à rien (ce qui est fait dans la fonction TestFrame.setChoix1. Il faut vider le combo puis le reremplir avec les nouveaux éléments. Si necessaire, utiliser un combomodel.

    a+

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Par défaut
    Salut,
    je viens de modifier le code des deux classes de cette manière:
    1.Classe TestFrame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      JComboBox chooseAff=new JComboBox(choix1);
    	    conteneurCombo.put("chooseAff", chooseAff);
    où conteneurCombo est une hashmap. (on définit le getter sur conteneurCombo par la même occasion)

    2.classe Cont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (siteName =="pardi"){
    				JComboBox chooseAff= (JComboBox)TestFrame.getConteneurCombo().get("chooseAff");
    				chooseAff.removeAllItems();
    				chooseAff =new JComboBox(choix2);
    				TestFrame.setChoix1(choix2);
    			}
    c'est pareil, ça m'affiche toujours pas la nouvelle liste...

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    euh dans le code posté, tu crées un combo, y ajoutes des elements puis tu n'en fais rien... Normal que ca marche pas...

    Il faudrait prendre le combo qui a été ajouté à la frame, puis faire des additems avec tes items.

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Par défaut
    euh dans le code posté, tu crées un combo, y ajoutes des elements puis tu n'en fais rien... Normal que ca marche pas...

    Il faudrait prendre le combo qui a été ajouté à la frame, puis faire des additems avec tes items.
    Je comprend pas... tu veux bien me donner un exemple stp? parce que je pense que faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JComboBox combo= new JComboBox(liste)
    c'est la même chose au final que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(Integer item:liste){ combo.addItem(item) }
    avec liste une liste d'Integer, bien évidemment.

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant (domaine de prédilection java)
    Inscrit en
    Mars 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant (domaine de prédilection java)
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2012
    Messages : 71
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    euh dans le code posté, tu crées un combo, y ajoutes des elements puis tu n'en fais rien... Normal que ca marche pas...

    Il faudrait prendre le combo qui a été ajouté à la frame, puis faire des additems avec tes items.
    Pardonne mon entêtement hwoarang! j'ai testé en modifiant le code de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chooseAff.removeAllItem();
    for(Integer item:choix2){ combo.addItem(item) }
    ....et ça marche à la perfection

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Prob: Deux JComboBox et un Jbutton
    Par diditin dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/06/2006, 16h59
  2. Probleme avec deux JComboBox
    Par zandb69 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 26/05/2006, 11h58
  3. [AJAX] Synchronisation de deux listes déroulantes
    Par Le Rebel dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/03/2006, 23h28
  4. Synchronisation de deux TClientDataSet
    Par stephane_lec dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/03/2004, 16h42
  5. synchronisation de deux DBLookUPComboBox
    Par frede dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/02/2004, 08h32

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