JButton & ActionListener

  • Themenstarter Themenstarter Martin222
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

Martin222

Gast
Hallo,
ich habe folgendes Problem:


Code:
public void paintElements(JFrame f, Status status, ResourceBundle text) {
...

JButton button = new JButton("Create New");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
	X			openCreateWindow(status, text);

				// irgendwie das hier an button binden:
				// openCreateWindow(status, text);
			}
			
		});

...
}

Wenn ich das so machen will, sagt eclipse mir an der Stelle x:
cannot refer to a non-final variable status/text inside an inner class defined in a different method.

die variablen status und text werden in der main-Methode angelegt, aber auch wenn ich sie als Klassenvariablen anlege, kommt diese Fehlermeldung.

can you help me, please? 🙂

Gruß, Martin[/code]
 
Du musst sie als private, finale Instanzvariablen anlegen.
Ansonsten...
Code:
openCreateWindow(Klassenname.this.status, Klassenname.this.text);
sollte das ^^ auch funktionieren. Aber auch nur, wenn sie mindestens als private Instanzvariablen angelegt sind.
 
ok, das funktioniert. nur musste ich sie auch noch static machen.

aber warum muss sie private sein?

gruß, martin
 
und vor allem: warum muss der Klassenname davorstehen?

noch mal gruß martin.
 
Besser ist es jedoch die Variablen nicht static zu deklarieren, kann sein, dass ich dich auch falsch verstanden habe...
Deklariere die Variablen als private Instanzvariablen. Die Definition/Initialisierung kann dann auch im Konstruktor oder einer anderen Methode erfolgen.
Also die Variablen nicht mehr in der main()-Methode erzeugen, weil sie sonst auch static sein müssen.
Warum Instanzvariablen privat deklarieren
 
ok, damit beschäftige ich mich gleich mal. aber da die variablen in der main-methode benutzt werden, müssen sie doch static sein? .. oder kann ich das umgehen, indem ich sie immer mit this.variable benutze?

gruß martin
 
Wenn du in deiner Klasse alles aus einer main()-Methode fährst, ist sie doch recht unflexibel und hat mit Objektorientierung kaum noch etwas zu tun.
In der main()-Methode solltest du ein Objekt deiner Klasse anlegen und dann die Methoden des Objektes aufrufen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben