Bonjour le forum,
Je reviens vers vous concernant une difficulté sur des actionListener.
J'ai une IHM avec 2 ComboBox: une pour une liste d'usine de production et une autre contenant la liste des lignes de production
Ces deux listes sont alimentées par l'appel de deux REST services: l'un me renvoi la liste des usines et l'autre la liste des lignes (je précise que la liste des lignes est l'ensemble des lignes de production de toutes les usines confondues). Je précise également que j'ai ajouté dans chacune de ces combobox un item "vide" qui permettra à l'utilisateur de ré-initialiser la combobox en question.
Ce que je cherche à faire:
-Lorsque l'utilisateur choisis une usine, je souhaite que toutes les lignes de production de cette usine s'affiche dans ma seconde combobox
-Lorsque l'utilisateur choisis une ligne de prod, je souhaite que l'usine correspondante s'affiche dans ma première combobox
-Lorsque l'utilisateur choisis le champs "vide", la combobox se réinitialise avec l'ensemble des items du rest service
Voici mon code actuel:
Le gros soucis ici, c'est que lorsque l'utilisateur choisis une usine je supprime tout ce qu'il y a dans la combo des ligne et le programme l'interprète comme une action sur la ligne, je passe donc dans l'autre action Listener.
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 //****************************************************************************************** // ACTIONS //****************************************************************************************** //When a plant is selected //cbPlant.addActionListener(new ActionListener(){ ActionListener plantListener = new ActionListener(){ public void actionPerformed(ActionEvent e) { cbLine.removeAllItems(); cbLine.addItem(""); if(cbPlant.getSelectedItem() == ""){ LinesList lineslist = ClientRest.getLinesList(); for(Line line : lineslist.getLine()){ cbLine.addItem(line); } }else{ String plant = (String) cbPlant.getSelectedItem(); for(Line line : parseLines(lineslist.getLine(), plant)){ cbLine.addItem(line.getName()); } cbLine.setSelectedIndex(1); } updateIHM(); } //}); }; //When a line is selected cbLine.addActionListener(new ActionListener(){ //lineListener = new ActionListener(){ public void actionPerformed(ActionEvent e) { cbPlant.removeActionListener(plantListener); cbPlant.removeAllItems(); cbPlant.addItem(""); if(cbLine.getSelectedItem() == ""){ PlantsList plantslist = ClientRest.getPlantsList(); for(Plant plant : plantslist.getPlant()){ cbPlant.addItem(plant.getName()); } }else{ cbPlant.addItem(parsePlants((Line)cbLine.getSelectedItem())); cbPlant.setSelectedIndex(1); } cbPlant.addActionListener(plantListener); updateIHM(); } }); //};
J'ai réussi à gérer le cas où l'utilisateur choisis une ligne de production en déclarant un actionListener (plantListener) que je peux désactiver et réactiver. Par contre je ne peux pas réaliser la même chose avec un lineListener du fait qu'il est déclaré plus bas.
Je bloque complètement là dessus
Si quelqu'un sait comment m'aider???
Merci d'avance.
A bientot
Partager