2011-01-21 3 views
1

J'ai placé un JComboBox sur un JDialog, puis par NetBeans vue de la conception, je lie la JComboBox à une fonction d'événement Événements> Article> itemStateChangedJava: myComboBoxItemStateChanged est déclenché deux fois?

private void myComboBoxItemStateChanged(ItemEvent evt) {//created by netbeans 
    System.out.println("triggered"); 
} 

quand je change la comboBox par myComboBox.setSelectedIndex(#), qu'il appelle la myComboBoxItemStateChanged() Une fois, mais si je le change en cliquant sur la comboBox et en sélectionnant un autre élément, il déclenche myComboBoxItemStateChanged() deux fois! il imprime "déclenché" deux fois?

Ce problème se produit dans tous mes comboboxes!

Qu'est-ce que je fais mal? ou est-ce un bug?

Répondre

4

C'est parce qu'un événement est de dire à l'auditeur qu'une option a été désélectionnés, et le prochain événement à dire qu'une autre option a été sélectionnée .

Vous pouvez savoir à quoi correspond réellement un événement en appelant evt.getStateChange(). Il renverra soit ItemEvent.SELECTED ou ItemEvent.DESELECTED.

Si vous changez "triggered"-"triggered " + evt.getStateChange() vous verriez la différence car il imprimerait

triggered 2 
triggered 1 

Donc, si vous êtes uniquement intéressé à des événements où quelque chose a été sélectionné vous pouvez ajouter, à la haut de votre mise en œuvre de l'auditeur

if (evt.getStateChange() == ItemEvent.DESELECTED) 
    return; 

Voici un extrait de the docs on getStateChange():

Renvoie le type de changement d'état (sélectionné ou désélectionné).

Retourne un entier qui indique si l'élément a été sélectionné ou désélectionné

+0

Merci beaucoup: D Nice Explication^- ^ – evilReiko

0

Vous pouvez le faire comme ceci:

jComboBox.addActionListener(new ActionListener() { 

       public void actionPerformed(ActionEvent e) { 
         System.out.println("triggered"); 
       } 
     }); 

Il impression (déclenché) une fois.

Questions connexes