# JButton Array - ActionListener



## Coder21 (14. Aug 2007)

Hallo!

Wie kann ich, wenn ich einem JButton-Array ActionListener hinzugefügt habe, bei einem Event eindeutig feststellen, welcher der (in meinem Fall 20) Buttons geklickt wurde? Mit getActionCommand() funktioniert es nicht, da sich die Namen zur Laufzeit ändern.

Danke schonmal für eure Bemühungen!
Coder21


----------



## MarcoBehnke (14. Aug 2007)

http://java.sun.com/j2se/1.3/docs/api/java/util/EventObject.html#getSource()


----------



## Coder21 (14. Aug 2007)

Das habe ich mir auch schon überlegt, aber ich bekomme einen ewig langen String zurück, und habe noch nicht wirklich eine Stelle oder Methode gefunden, die eindeutig besagt, welcher Button es ist.


----------



## MarcoBehnke (14. Aug 2007)

String? getSource gibt ein Object zurück.

Als Beispiel legst Du Dir eine Collection an, wo alle Deine Buttons drinne sind.
Und dann kannst Du so den Button finden



```
Object o = e.getSource();
if (buttonlist.contains(o)) { // war das überhaupt ein Button aus meiner Liste?
  int index = buttonlist.indexOf(o);
  JButton button = (JButton)buttonlist.get(index);
  // tu was mit dem Button
}
```


----------



## Coder21 (14. Aug 2007)

Ich schaffs irgendwie nicht, eine Collection anzulegen.
Kannst du vielleicht ein kleines Beispiel dazu schreiben?


----------



## MarcoBehnke (14. Aug 2007)

```
JButton button1 = new JButton();
// usw

ArrayList buttonlist = new ArrayList();
buttonlist.add(button1);
// usw
```


----------



## Coder21 (14. Aug 2007)

Danke für den kurzen Code-Ausschnitt. Das mit der ArrayList funktioniert jetzt ohne Fehlermeldung.
Allerdings liefert folgendes:

```
boolean a=buttonlist.contains(o))
```
immer false. Dabei ist der Button in die Liste mit aufgenommen!


----------



## SlaterB (14. Aug 2007)

schau dir die Objekte in der Liste an, und zwar beim Einfügen und zum Zeitpunkt des contains()-Aufruf,
gib .hashcode() aus, um eine eindeutige Nummer pro Objekte zu bekommen,

genauso machst du es mit dem Button,

dann weist du ganz genau welches Objekt wann wo wieso drin ist


----------



## Marco13 (14. Aug 2007)

Schau velleicht auch mal hier
http://www.java-forum.org/de/viewtopic.php?p=310844


----------



## MarcoBehnke (14. Aug 2007)

kannst du bitte deine Codezeile posten, in denen das passiert?


----------



## Coder21 (14. Aug 2007)

Die Lösung ist so einfach. Danke an Marco13.

Trotzdem hier nochmal die Code-Zeilen der komplizierteren Variante:

```
JFrame Fenster;
JButton buttonarray[]=new JButton[20];
ArrayList buttonlist=new ArrayList();
...
	for(int i=0;i<buttonarray.length;i++)
	{
		buttonlist.add(buttonarray[i]);
                System.out.println(buttonarray[i].hashCode()); //hier kommt die NullPointerException
		...
		StreckenB[i].addActionListener(this);
		Fenster.add(buttonarray[i]);
	}

...
public void actionPerformed(ActionEvent e)
{
	Object o = e.getSource();
	if (buttonlist.contains(o)) 
	{
		int index = buttonlist.indexOf(o);
		JButton button = (JButton)buttonlist.get(index);
	}
}
```


----------

