# button.addActionListener(this);   -  Welches this ist gemeint?



## Jack159 (2. Feb 2012)

Hallo,

Ich fange gerade mit der GUI-Programmierung an. Im Buch steht das unten aufgeführte Beispiel.
Es geht um ein Beispiel, wo ein Button erzeugt wird und wenn man ihn klickt, soll deine Bezeichnung geändert werden. Es geht also um actionListener und actionEvents.
Was ich dort aber nicht verstehe ist, was genau bei

```
button.addActionListener(this);
```
denn übergeben wird mit this. Zuerst dachte ich das Objekt "gui" wird übergeben, dem ist aber nicht so.



```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Test implements ActionListener {
	
	JButton button;
	
	public static void main(String[] args) {
		
		Test gui = new Test();
		gui.los();
		
		
	}
	
	public void los() {
        JFrame frame = new JFrame();
		
	    JButton button = new JButton("Klick mich");
	    
	    button.addActionListener(this);
		
		frame.add(button);
		
		frame.setSize(300, 300);
		frame.setVisible(true);
	
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public void actionPerformed(ActionEvent event) {
		button.setText("Ich wurde geklickt");
	}

}
```


----------



## HelgeW (2. Feb 2012)

wenn dort ein this steht wird immer die Instanz der am nächsten sichtbaren Klasse genommen..
Hier also von Test.
Diese Klasse implementiert ja auch den ActionListener, welches vorraussetzung an den Parameter ist


----------



## Jack159 (2. Feb 2012)

HelgeW hat gesagt.:


> wenn dort ein this steht wird immer die Instanz der am nächsten sichtbaren Klasse genommen..
> Hier also von Test.
> Diese Klasse implementiert ja auch den ActionListener, welches vorraussetzung an den Parameter ist



Die einzigen Instanzen die erzeugt wurden sind doch: gui, button und frame. Und egal welche der 3 Objekte ich statt "this" dort in die Klammern reinschreibe, er zeigt es mir als Fehler an...


----------



## insane80 (2. Feb 2012)

this ist eine Referenz auf das aktuelle Objekt. 
	
	
	
	





```
addActionListener
```
 erwartet als Übergabe einen ActionListener. 
Deine Klasse Test implementiert ActionListener und kann daher an die Methode übergeben werden.


----------



## HimBromBeere (2. Feb 2012)

Mit this sollte dann die gui gemeint sein (die du in der main ja mit Test 
	
	
	
	





```
gui = new Test();
```
anlegst), da diese Variable jedoch nicht im 
	
	
	
	





```
los()
```
 bekannt ist, führt der Aufruf 
	
	
	
	





```
addActionListener(gui)
```
 auch zum Fehler


----------



## Jack159 (2. Feb 2012)

Ok danke, dann muss ich mir einfach nur merken, dass das "this" an der Stelle für das "gui" steht (in dem Programm).


----------



## HimBromBeere (2. Feb 2012)

Genaugenommen ist mit 
	
	
	
	





```
this
```
 nicht 
	
	
	
	





```
gui
```
 gemeint, sondern 
	
	
	
	





```
gui
```
 und 
	
	
	
	





```
this
```
 zeigen auf das selbe Objekt.


----------



## xehpuk (2. Feb 2012)

Bei 
	
	
	
	





```
button.setText("Ich wurde geklickt");
```
 wird übrigens eine 
	
	
	
	





```
NullPointerException
```
 fliegen, weil 
	
	
	
	





```
button == null
```
. Das liegt daran, dass du bei 
	
	
	
	





```
JButton button = new JButton("Klick mich");
```
 nicht der Instanzvariable zuweist, sondern eine neue lokale Variable erstellst. Das siehst du auch daran, dass es keine Fehlermeldung geben wird, wenn du eine der beiden Variablen nicht mehr "button" nennst. Beheben lässt sich das, wenn du den Typ weglässt, also 
	
	
	
	





```
button = new JButton("Klick mich");
```
 schreibst.


----------

