JComboBox: Beim Einfügen neuer Werte ItemStateChanged blocken.

kingston

Mitglied
Hallo,

ich benutze eine JComboBox deren Inhalt dynamisch gefüllt wird. Allerdings schießt der Itemlistener jedesmal los wenn neue Werte hineingeschrieben werden. Gibt es vielleicht eine saubere Art den Listener an dieser Stelle zu blocken?

Combobox-Init:
Java:
combo.addItemListener(new ItemListener()
		{
			public void itemStateChanged(ItemEvent e)
			{
				if (e.getStateChange() == ItemEvent.SELECTED)
				{
					// Ja, jetzt darf es schießen!
				}
			}
		});

Einfügen neuer Elemente:
Java:
for (LadderImage image : ladderImages)
			{
				combo.addItem(image); // Jetzt soll er nicht schießen!
			}

Den Listener erst nach Einfügen neuer Werte zu adden würde nichts bringen, da sich diese ständig ändern. Den Listener vor dem Einfügen zu removen und danach wieder zu adden würde ich gerne vermeiden 🙂.

Vielen Dank
 
Hallo,

probiere es mal mit einem (statischen) boolean, auf den sowohl deine Befüllmethode, sowie der Listener Zugriff haben.

Vor dem Befüllen sperrst du dann damit einfach die entsprechende Methode in deinem Listener (mit einer einfachen if-Abfrage). Nach dem Befüllen setzt du den boolean wieder zurück und die Methode im Listener macht wieder ihren Job.


MfG
hansmueller
 
Danke,

will das natürlich nicht unbeantwortet lassen. Statisches boolean ist gar nicht mal nötig, ich hab einfach ein Feld-boolean eingefügt:

Java:
cbLeftLadder.addItemListener(new ItemListener()
{
	public void itemStateChanged(ItemEvent e)
	{
		if (e.getStateChange() == ItemEvent.SELECTED && !addingItem)
		{
			// TODO
		}
	}
});

Beim Einfügen wird addingItem auf false gesetzt, klappt prima

Java:
...
addingItem = true;
for (LadderImage image : ladderImages)
    cbLeftLadder.addItem(image);
addingItem = false;
...
 

Zurück
Oben