2012-07-11 2 views
0

Je les auditeurs suivants:CheckBox auditeur boucle mort

 mListener = new ItemListener() { 

      public void itemStateChanged(ItemEvent e) { 
       if (((JCheckBox) e.getSource()).isSelected()) { 
        setRequired(true); 
       } else { 
        setRequired(false); 
       } 
       getTableSteps().repaint(); 
      } 
     }; 

     myCheckBox.addItemListener(mListener); 

     for (int i = 0; i < mTableSteps.getRowCount(); i++) { 
      ((JCheckBox) mTableSteps.getCellRenderer(i, 0)).addItemListener(new ItemListener() { 

       public void itemStateChanged(ItemEvent e) { 
        myCheckBox.setSelected(false); 
       } 
      }); 
     } 

Comme vous pouvez le voir, myCheckBox est la case à cocher qui, si elle est modifiée, modifie certaines cases de la première colonne de mtablesteps (ce qui est fait dans la méthode setRequired). En outre, si l'une des cases à cocher de la colonne 0 de mtablesteps est modifiée, elle doit mettre myCheckBox à ne pas être sélectionné.

Maintenant, le problème est que lorsque je sélectionne myCheckBox, il déclenche l'auditeur et sélectionne certaines cases de mTableSteps. Mais lorsque ces cases à cocher sont sélectionnées, elles déclenchent également leur écouteur et désélectionnent myCheckBox. Ainsi, myCheckBox est toujours désélectionné.

J'espère que cela a du sens. Toutes les suggestions sur la façon d'éviter cela sont appréciées. Pour être encore plus clair, j'essaie d'obtenir un écouteur pour myCheckBox qui, lorsque la case est cochée, sélectionne certaines des cases de la première colonne de mTableSteps. Mais aussi, si je sélectionne/désélectionne une case à cocher de la table, cela mettra myCheckBox à ne pas sélectionné. Merci beaucoup.

Répondre

0

Vous avez besoin d'un type d'indicateur d'état que vous pouvez utiliser pour indiquer aux écouteurs enfants s'ils doivent traiter l'événement de non.

mListener = new ItemListener() { 

    public void itemStateChanged(ItemEvent e) { 
     ignoreUpdates = true 
     try { 
      if (((JCheckBox) e.getSource()).isSelected()) { 
       setRequired(true); 
      } else { 
       setRequired(false); 
      } 
      getTableSteps().repaint(); 
     } finally { 
      ignoreUpdates = false; 
     } 
    } 
} 

myCheckBox.addItemListener(mListener); 

for (int i = 0; i < mTableSteps.getRowCount(); i++) { 
    ((JCheckBox) mTableSteps.getCellRenderer(i, 0)).addItemListener(new ItemListener() { 
     public void itemStateChanged(ItemEvent e) { 
      if (!ignoreUpdates) { 
       myCheckBox.setSelected(false); 
      } 
     } 
    }); 
} 

espoir qui aide