2010-03-28 5 views
1

Salut tout ce que j'ai quelques difficultés avec l'ajout d'un JOptionPane à l'auditeur JCheckBoxJOptionPane apparaisse sur sélectionné JCheckBox


public void itemStateChanged(ItemEvent evt) { 

      if(evt.getStateChange() == ItemEvent.SELECTED){ 
        ///some code 

         JOptionPane.showMessageDialog(null, "Message", "Alert", 
           JOptionPane.INFORMATION_MESSAGE); 
      } 
    }

il fonctionne très bien, mais le problème est que le JCheckBox obtient sélectionné et immédiatement décochée comment puis-je réussi à résoudre ce problème?

Vive

+1

Je suis curieux de savoir ce que fait le "code". Êtes-vous sûr de ne pas modifier l'état de la case là-bas? –

+1

C'est pourquoi un SSCCE: http://sscce.org devrait être posté avec chaque question, ainsi nous n'avons pas besoin de deviner ce que fait un "code". – camickr

Répondre

2

Voici quelques suggestions (solution) pour utiliser un écouteur d'action au lieu d'un écouteur d'élément. Cela fonctionne, cependant, je pense que c'est étrange étant donné que tous les textes que j'ai suggérés à un écouteur d'élément sont le type attendu d'écouteur pour une case à cocher.

En fait, il s'agit d'un bogue connu reconnu par Oracle Bug ID:6924233 Le JOptionPane provoque apparemment la génération d'un autre événement.

Le correctif recommandé consiste à appeler le JOptionPane à l'aide de invokeLater. Cela fonctionne correctement et implique seulement une modification de code mineur à un programme utilisant déjà un écouteur d'élément à d'autres fins.

+0

vous avez raison s'il vous plaît postez celui-ci une réponse à ma question http://stackoverflow.com/questions/8282488/where-is-lost-setselected-from-jcheckbox, parce que ce poste pourrait être fermé à nouveau +1 – mKorbel

2

Le problème doit être « /// code » comme le programme d'essai suivant fonctionne pour moi en Java 6:

public class CheckBoxItemListener { 
    public static void main(String[] args) { 
     final JCheckBox checkBox = new JCheckBox("Click me"); 

     JFrame frame = new JFrame("CheckBox Item Listener"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(100, 100, 300, 300); 
     frame.add(checkBox); 
     frame.setVisible(true); 

     checkBox.addItemListener(new ItemListener() { 
      @Override 
      public void itemStateChanged(ItemEvent evt) { 
       if (evt.getStateChange() == ItemEvent.SELECTED){ 
        JOptionPane.showMessageDialog(null, "Message", "Alert", 
          JOptionPane.INFORMATION_MESSAGE); 
       } 
      } 
     }); 
    } 
} 

Jetez un oeil dans le code omis pour setSelected ou Appeler les appels

+0

Eh bien, il semble que le problème n'est pas dans le code que j'ai testé mon code sur mon Linux et cela fonctionne, mais je développe l'application sur une machine virtuelle Windows XP et il semble que c'est le problème. Je ne sais pas pourquoi mais sous mon XP le code sélectionne le checkBox et le désélectionne. Est-ce que quelqu'un a une idée pourquoi? – greenLizard

Questions connexes