# ItemListener + JComboBox



## SebSnake (16. Jun 2008)

Ich habe ein JComboBox-Array bestehend aus insgesammt 6 JComboBox-Objekten. Ein ItemListener überwacht alle Objekte, und soll, wenn in einem der JComboBox-Objekten ein anderes Element ausgesucht wird, das entsprechende Objekt eindeutig zurückgeben.


```
spieler[i] = new JComboBox();
spieler[i].addItem("Mensch");
spieler[i].addItem("Computer");
spieler[i].addItemListener(this);
```

So werden die Boxen in einer Schleife erstellt.

Mein Listener sah bisher so aus:


```
public void itemStateChanged(ItemEvent e) {
		if (e.getStateChange() != e.SELECTED)
			return;
		Object obj = e.getItem();
		String nummer = e.getSource().toString();
		int x = 0;
		for (int l = 18; l < 38; l++){
			x += nummer.toCharArray()[l];
		}	

// Bisher war es so, dass ich vom e.getSource()-String die Chars 18-38 addiert habe.
// Dort stehen ja u.A. auch die Koordinaten der Objekte drin. Es würde so auch fast klappen,
// nur 3 der Objekte haben nun den gleichen Wert (wegen Symmetrie bei Koords).


		int i = sucheObj(x);
// sucheObj(x) ist eine einfache switch(x) Methode, die mir zu den einzelnen X-Werten den passenden
// spieler[]-Index zurückgab (aber umständlich und unsicher - glaube ich)...
      System.out.println("Objekt: spieler["+i+"]");
}
```


----------



## Marco13 (16. Jun 2008)

Häh?  ???:L Worum geht's jetzt: Um die ComboBox selbst (die bekommt man ja mit e.getSource()) oder um den Index? Falls es um letzteren geht: Du kannst einfach in deinem Array suchen

```
for (int i=0; i<spieler.length; i++)
{
    if (spieler[i] == e.getSource()) daIstEr();
}
```
oder anonyme Listener verwenden

```
// spieler[i].addItemListener(this); // weg
spieler[i].addItemListener(createItemListener(i));

private ItemListener createItemListener(final int index)
{
    ItemListener result = new ItemListener()
    {
        public void itemStateChanged(ItemEvent e) 
        {
            System.out.println("Spieler index "+index);
        }
    };
    return result;
 }
```
oder so... aber was das mit den "Koordinaten" ist, WILL ich glaubich garnicht verstehen  :roll:  :wink:


----------



## SebSnake (16. Jun 2008)

ok, ersteres hat schon super geklappt...
ich hab immer nur e.getSource().toString() ausgeführt, und da kam halt immer nur das selektierte item zurück... danke =)


----------

