hyperion Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 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 Zitieren
DeMon Toll Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 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 Zitieren
flashpixx Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 "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 Zitieren
hyperion Geschrieben 24. Juli 2008 Autor Geschrieben 24. Juli 2008 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 Zitieren
flashpixx Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 Du musst die Methode, die vom ActionListener abstrakt definiert wird, entsprechend überschreiben und dann den ActionListener an Dein Control mit addListener anbinden. Phil Zitieren
geloescht_Newlukai Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 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. Zitieren
Kaeyu Geschrieben 24. Juli 2008 Geschrieben 24. Juli 2008 @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 Zitieren
Empfohlene Beiträge
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.