Ich habe eine JComboBox, welche vordefinierte String Werte besitzt und editierbar ist. Wenn ein neuer Wert eingegeben wird, soll dieser in die Liste übernommen werden. Aus diesem soll eine Zahl geparsed werden (zur Zeit wird die Zahl nur geparsed, wenn Sie am Anfang steht).
Mein Problem liegt nun darin, daß wenn ein neuer Wert in die JComboBox eingegeben wird, ein neues Item hinzugefügt wird, was vermutlich wieder ein neues Event auslöst, denn ich habe da eine Endlosschleife...
In so fern verstehe ich es noch nicht ganz mit den Events...
Warum ruft es sich immer wieder selbst auf?
Workaround wurde in diesem Forum schon einmal gepostet, es handelte sich um ein Boolean, den man zu Beginn des Listeners abfragt, dann auf false setzt und erst am ende des listeners wieder auf true setzt. Gibt es ansonsten noch eine bessere Lösung, da ich diese Lösung wirklich nur als Workaround ansehe...
Mein Problem liegt nun darin, daß wenn ein neuer Wert in die JComboBox eingegeben wird, ein neues Item hinzugefügt wird, was vermutlich wieder ein neues Event auslöst, denn ich habe da eine Endlosschleife...
In so fern verstehe ich es noch nicht ganz mit den Events...
Warum ruft es sich immer wieder selbst auf?
Workaround wurde in diesem Forum schon einmal gepostet, es handelte sich um ein Boolean, den man zu Beginn des Listeners abfragt, dann auf false setzt und erst am ende des listeners wieder auf true setzt. Gibt es ansonsten noch eine bessere Lösung, da ich diese Lösung wirklich nur als Workaround ansehe...
Code:
JComboBox cb = new JComboBox();
cb.setEditable(true);
cb.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
try {
if (e.getStateChange() == ItemEvent.DESELECTED) {
// Entry was deselected
int index = cb.getSelectedIndex();
if (index == -1) {
// --- new entry ---
String entry = (String)cb.getSelectedItem();
NumberFormat numf =
NumberFormat.getIntegerInstance();
numf.setParseIntegerOnly(true);
int number = numf.parse(entry).intValue();
model.updateMessages(log.filterMessages(number));
cb.addItem((new Integer(number).toString());
}
...