Hallo,
ich habe folgendes Problem:
Ich habe drei JCheckBoxen und eine JList.
Wenn in der JList der Index geändert wird, werden aus einem zweidimensionalen [JListIndex][] boolean-Array die zu setzenden Werte für die JCheckboxen ausgelesen.
Sie sollen programmatisch gesetzt werden.
Immer dann wenn der User eine der JCheckBoxen ändert, wird das boolean-Array auf die aktuellen Werte aktualisiert, um bei Wiederwechsel auf den Index in JList die Werte beizubehalten, die bereits getätigt wurden. Hier die EventListener:
Das Problem ist, das die ItemListener itemStateChanged-Events der JCheckboxen auch aufgerufen werden, wenn die Änderung des Checkbox-States programmatisch mit jcb1.setSelected(true); erfolgt. Dadurch kommt die Logik durcheinander. Wie kann ich vorgehen, um dies zu vermeiden?
Und was sagt eigentlich e.getValueIsAdjusting()? Vielen Dank für Tipps! Gruß
ich habe folgendes Problem:
Ich habe drei JCheckBoxen und eine JList.
Wenn in der JList der Index geändert wird, werden aus einem zweidimensionalen [JListIndex][] boolean-Array die zu setzenden Werte für die JCheckboxen ausgelesen.
Sie sollen programmatisch gesetzt werden.
Immer dann wenn der User eine der JCheckBoxen ändert, wird das boolean-Array auf die aktuellen Werte aktualisiert, um bei Wiederwechsel auf den Index in JList die Werte beizubehalten, die bereits getätigt wurden. Hier die EventListener:
Code:
// ItemListener für die Checkboxen
jcb1.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.DESELECTED)
{
//schreibe die Werte in das booleanArray
checkBoxReminder(jl.getSelectedIndex(), jcb1.isSelected(), jcb2.isSelected(), jcb3.isSelected());
// aktualisiere Anzeige
manipulatePlayList();
}
else if(e.getStateChange() == ItemEvent.SELECTED)
{
checkBoxReminder(jl.getSelectedIndex(), jcb1.isSelected(), jcb2.isSelected(), jcb3.isSelected());
manipulatePlayList();
}
}
});
jl.addListSelectionListener( new ListSelectionListener()
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting())
{
if(jl.getSelectedIndex() != -1)
{
//setze die JCheckboxen durch nachschauen im boolean-Array
if(booleanArray[jl.getSelectedIndex()][0]) jcb1.setSelected(true);
if(booleanArray[jl.getSelectedIndex()][1]) jcb2.setSelected(true);
if(booleanArray[jl.getSelectedIndex()][2]) jcb3.setSelected(true);
}
}
}
});
Das Problem ist, das die ItemListener itemStateChanged-Events der JCheckboxen auch aufgerufen werden, wenn die Änderung des Checkbox-States programmatisch mit jcb1.setSelected(true); erfolgt. Dadurch kommt die Logik durcheinander. Wie kann ich vorgehen, um dies zu vermeiden?
Und was sagt eigentlich e.getValueIsAdjusting()? Vielen Dank für Tipps! Gruß