Problèmes de listener associé à un Jcombobox
Bonjours,
voilà maintenant quelque temps que je suis bloqué sur un de mes programmes à cause d'un JCombobox. Mon problème est que lorsque je clique sur le JCombobox 2 événements sont créés au lieu d'un seul.
J'ai bien vérifié je ne rattache le listener qu'une fois et au bon bouton.
Voilà une partie de mon code:
Code:
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
| final JComboBox figure = new JComboBox(new String[]{"cercle","rectangle","quadrilatere","triangle"});
figure.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e){
fig = null;
dessin.removeAllListener();
if (newFig.isSelected()){
switch (figure.getSelectedIndex()){
case 0:
fig = new UnCercle();
break;
case 1:
fig = new UnRectangle();
break;
case 2:
fig = new UnQuadrilatere();
break;
case 3:
fig = new UnTriangle();
break;
}
if (fig != null)
dessin.removeAllListener();
dessin.construit(fig,couleurFig);
}
}
});
final JComboBox couleur = new JComboBox(new String[]{"rouge","vert","bleu","jaune"});
couleur.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e){
switch (couleur.getSelectedIndex()){
case 0:
couleurFig = Color.red;
break;
case 1:
couleurFig = Color.green;
break;
case 2:
couleurFig = Color.blue;
break;
case 3:
couleurFig = Color.yellow;
break;
}
System.out.println(manip.isSelected());
System.out.println(dessin.figureSelection() != null);
if (manip.isSelected() && dessin.figureSelection() != null){ // permet de changer la couleur d'une figure lors d'une manipulation
dessin.figureSelection().changeCouleur(couleurFig);
dessin.repaint();
System.out.println("test");
}
if (fig != null && newFig.isSelected()){ // Annule la creation en cours pour la recommencer avec la nouvelle couleur
dessin.removeAllListener();
dessin.construit(fig,couleurFig);
}
if (trace.isSelected()){ // change la couleur pendant un trace a main levee
dessin.trace(couleurFig);
}
}
}); |
Ce bout de code se trouve dans un constructeur.
J'ai testé grâce à la méthode getItemListeners() les listeners qui sont créés, je l'ai appliqué sur ma variable couleur et grâce à un system.out.println j'ai obtenu ceci:
Citation:
Fenetre$1PanneauChoix$2@53ba3d
javax.swing.plaf.basic.BasicComboPopup$Handler@e80a59
Ce sont les 2 événements générés lorsque je change la couleur via le bouton. Je ne comprend pas pourquoi il y en a 2 et cela me gène pour la suite de mon programme.
Si quelqu'un peut m'éclairer merci d'avance.
Explication du double Event
bonjour à tous,
Certes ce message est assez vieux. Mais mieux vaut tard que jamais...;)
Le fait est que ce n'est pas une erreur si l'appel se fait deux fois.
En effet, le listener ItemState Change écoute le changement d'état d'un item dans la liste( comme son nom l'indique ...je sais....8O ).
Quand on sélectionne un élément dans la liste , il y a deux éléments qui changent d'état......
Celui qui était sélectionné ne l'est plus. ===> premier Appel
Celui que l'on sélectionne passe à sélectionné ===> deuxième Appel
Voila, voila...
C'est pour cela qu'il est vivement conseillé de faire comme ceci quand on on veut récupérer le nouvel élément selectionné
Code:
1 2 3 4 5 6 7
|
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
System.out.println("ELEMENT CHOISI");
}
} |
JAVA Bien, merci