j'ai une liste deroulante JComboBox,deux listes en fait, je veus que chaque fois que je selectionne un item de la première liste la deuxième liste change de contenu chaque fois aussi
j'ai une liste deroulante JComboBox,deux listes en fait, je veus que chaque fois que je selectionne un item de la première liste la deuxième liste change de contenu chaque fois aussi
Bonjour,
Le tutoriel de SUN me semble assez bien fait :
http://java.sun.com/docs/books/tutor.../combobox.html
Ci-dessous un exemple compilable et exécutable. Tout item sélectionné dans la JComboBox de gauche se rajoute à celle de droite, sauf s'il s'y trouve déjà.
C'est juste un exemple de base. On peut aller plus loin dans le sens de l'architecture MVC (modèle vue contrôleur) en implémentant correctement les modèles derrière les JComboBox.
Nicolas
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 // appeler le fichier Exemple048_Swing_JComboBox.java // Nicolas_75, 6 septembre 2006 // http://www.developpez.net/forums/showthread.php?t=206292 // tutoriel JComboBox : http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemple048_Swing_JComboBox extends JFrame { public Exemple048_Swing_JComboBox() { // initialisation de la JFrame this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // initialisation de la 2nde JCombobox, // nécessaire pour l'ActionListener ci-dessous final JComboBox box2 = new JComboBox(); // final ci-dessus pour permettre l'accès depuis le listener interne // première JComboBox String[] values1 = {"Elem1", "Elem2", "Elem3", "Elem4", "Elem5"} ; final JComboBox box1 = new JComboBox(values1); // final ci-dessus pour permettre l'accès depuis le listener interne box1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { String selectedItem = (String) box1.getSelectedItem(); // ajoutons l'item sélectionné à gauche dans le JComboBox de droite // mais uniquement si ce dernier ne le contient pas déjà ComboBoxModel model = box2.getModel(); boolean alreadyInBox2 = false; int i=0; while ((!alreadyInBox2) && (i<model.getSize())) { if ((String) model.getElementAt(i) == selectedItem) alreadyInBox2 = true; i++; } if (!alreadyInBox2) box2.addItem(selectedItem); } }); box1.setPreferredSize(new Dimension(100,40)); this.add(box1,BorderLayout.WEST); // inclusion de la JComboBox dans la JFrame box2.setPreferredSize(new Dimension(100,40)); this.add(box2,BorderLayout.EAST); // affichage de la JFrame : this.pack(); } public static void main(String[] args) { Exemple048_Swing_JComboBox myFrame = new Exemple048_Swing_JComboBox(); myFrame.setVisible(true); } }
Salut,
Bon je chipote un peu mais je pense que c'est plus correct ainsi. J'ai juste remplacé == par equals
Envoyé par Nicolas_75
Bonjour, et merci de la remarque.![]()
Dans ce cas précis, où on ajoute bien à la JComboBox de droite des chaînes extraites de la JComboBox de gauche (donc avec le même contenu, mais surtout la même référence), le == donne bien le comportement attendu.
Mais, dans un contexte différent ou si on rajoute d'autres fonctionnalités à l'application, il pourrait ne pas en être de même, et il serait nécessaire de remplacer par .equals, pour ne pas tomber dans l'une des erreurs type de la programmation en Java (et difficile à repérer).
Du moins me semble-t-il.
Merci encore,
Nicolas
Ton exemple marche si la deuxième JComboBox est initialement vide, or dans le post initial c'est pas dit .
Je ne souhaitais pas polémiquer, loin de là. Je suis d'accord avec ta dernière remarque.
Qui a parlé de polémique ?![]()
On tous les deux d'accord et tout est bien dans le meilleur des mondes![]()
Ah... je ne sais pas si nous vivons dans le meilleur des mondes.
Mais pas de souci sur notre affaire, cela, c'est sûr.![]()
Partager