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
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
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(); } }
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.
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"); } }
Si vous avez des propositions...je vous remercie![]()
Partager