Zum Inhalt springen

ActionListener oder allgemeines Listener Problem


Empfohlene Beiträge

Geschrieben

Hallo,

um einen Listener zu registrieren verwende ich ja z.B.:

.addActionListener(this);

Irgendwie ist mir aber nicht klar wofür "this"eigentlich steht. Wenn ich in meinem Programm this durch den Klassennamen ersetze funktioniert es nicht mehr. Daher ist meine Vermutung, dass this ersetzbar druch den Klassennamen ist, wohl Falsch.

Aber wofür steht "this" dann?

mfg hyperion

Geschrieben

this ist soweit ich weis ein Pointer auf sich selbst (bitte nich steinigen wenns nich stimmt is schon ein weilchen her seit ich in java rumgewurstelt hab^^). Aber ich glaube mal sowas im Kopp gehabt zu haben. Also this zeigt auf seine eigene Klasse. Wobei du damit ja nur auf die Klasse zeigst und nicht auf ein Objekt davon. Wenn du z.B. das Event auf ein Textfeld setzen willst brauchste natürlcih den namen des Textfelds da reicht der this zeiger nicht aus aber du kannst ja weiterverzweigen (this.meinObjektname.ActionListener sowas.

so long

DeMon

Geschrieben

"this" ist die Referenz / Referenzzeiger auf sich / das Objekt selbst. Aus einer Klasse kann ich beliebig viele Objekte machen und this zeigt nicht auf die Klasse, sondern eben auf jedes erzeugte Objekt selbst. Also ein this in Objekt 1 zeigt auf Objekt 1, ein this in Objekt 2 auf Objekt 2 usw

Phil

Geschrieben


public class GUIBuilder extends JFrame implements ActionListener

{

...

...

...

Darstellenbutton.addActionListener( this); 

...

...

...

public static void main(String[] args)

    {

        GUIBuilder Frame =  new GUIBuilder();         

    } 

...

...

...

}

Und durch was könnte ich this jetzt ersetzen? Ich habe schon alles probiert... Frame, Darstellenbutton, GUIBuilder und nichts funktioniert. Laut flashpixx müsste doch eigentlich Frame funktionieren oder?

mfg hyperion

Geschrieben

Warum willst Du überhaupt einen Ersatz für "this" finden?

GUIBuilder ist eine Klasse. In der Methode "main" erzeugst Du ein Objekt dieser Klasse und weist dieses Objekt der Referenzvariablen "Frame" zu. Die Methode "main" ist eine statische Methode bzw. Klassenmethode und somit auch verwendbar, wenn noch kein Objekt der Klasse "GUIBuilder" erzeugt wurde.

Wahrscheinlich innerhalb des Konstruktors rufst Du dann "addActionListener(this)" auf. "this" referenziert auf das Objekt, dessen Konstruktor gerade abgearbeitet wird. Und innerhalb dieses Objekts hast Du natürlich keine Ahnung davon, welche Klasse dieses Objekt jetzt welcher Referenzvariablen zuweist. Innerhalb des Objekts ist das Objekt nur mit "this" referenzierbar.

Da "Frame" nicht klappt, kann es auch nicht klappen müssen ;) Das liegt daran, daß Du die Referenzvariable "Frame" innerhalb der Methode "main" deklarierst. Sie ist somit nur in "main" und nicht in der ganzen Klasse sichtbar. Aber selbst wenn Du "Frame" als Klassenvariable deklarierst, dürfte "Frame" nicht das tun, was Du Dir wünschst. Denn wenn der Konstruktor des Objekts durchläuft, ist das Objekt eben noch nicht instanziiert und "Frame" verweist noch auf "null", somit hättest Du gar keinen ActionListener hinzugefügt. Abhilfe würde für die Verwendung von "Frame" als Übergabeparameter für "addActionlistener" nur eine zweite Methode schaffen, die Du nach dem Konstruktor aufrufst.

Geschrieben

@hyperion

du könntest "this" z.b. wie folgt ersetzen, wenn du ein wenig anders programmierst:


public class GUIBuilder extends JFrame

{

...

public class meinActionListener implements ActionListener{

	public void actionPerformed(ActionEvent e){

		...

	}

}

...

...

GUIBuilder(String titel){

	super(titel);

	...

	Darstellenbutton.addActionListener(new meinActionListener());

}

...

...

...

public static void main(String[] args)

    {

        GUIBuilder Frame =  new GUIBuilder("Hurray, ein ActionListener =)! ");         

    } 

...

...

...

}

gr33tz

Raphael

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...