Eventlistener und inner class Variablen

Status
Nicht offen für weitere Antworten.

Kira

Neues Mitglied
Zuerst einmal mein Code:
Code:
public class myclass
{
	public static void main(String[] args)
	{
		JFrame fenster = new JFrame("Überschrift");
		fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		
		JLabel meinlabel = new JLabel("irgendein Text");
		fenster.add(meinlabel);
		
	    meinlabel.addMouseListener
	    (
	    	new MouseAdapter()
	    	{ 
	    		public void mouseClicked(MouseEvent event)
	    		{ 
	    			fenster.setSize(500,500); // <- funktioniert nicht
	    			//System.exit(1); <- das schon
	    		} 
	    	}
	    );
		
		fenster.setSize(300,200);
		fenster.setVisible(true);
	}
}

Wie man sieht wird ein einfaches fenster mit einem Textlabel erstellt.
Bei einem Doppelklick auf das Label, soll die Fenstergröße verändert werden. Von Eclipse bekomme ich aber den Fehler "Cannot refer to a non-final variable fenster inside an inner class defined in a different method". Soweit ich das übersetzen kann, beschwert sich Eclipse darüber, dass "fenster" in einer Unterklasse verwendet werden soll, es aber nicht darf. Wieso aber kann man System.exit() dann von aufrufen? Weil das final ist? Und wie kann ich es dann erreichen, aus mouseClicked() auf "fenster" zuzugreifen?

Gruß,
Kira[/code]
 
S

SlaterB

Gast
ist nicht final, sondern static, was in gewisser Weise auch final ist,
die Klasse System kann nicht weglaufen ;)

nicht-final stört den Compiler aus einem Grund, der zumindest mir auch nicht wirklich bekannt ist

es kann damit jedenfalls nicht zur Verwirrung kommen,
etwa indem du nach Deklaration der Variable fenster ein neues JFrame zuweist,

syntaktisch gesehen macht es aber keinen Sinn und ist immer denkbar einfach zu umgehen:
schreibe
final JFrame fensterFinal = fenster;
dann kannst du auf fensterFinal zugreifen,

da in diesem Fall fenster praktisch sowieso schon final ist,
kannst du fenster selber als final deklarieren, dann gehts auch:

final JFrame fenster = new JFrame("Überschrift");

eine finale Variable kann nach erstmaliger Zuweisung nicht mehr überschrieben werden
 

merlin2

Top Contributor
Code:
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JLabel;

import javax.swing.JFrame;

public class myClass 
{ 
 static JFrame fenster = new JFrame("Überschrift");
   public static void main(String[] args) 
   { 
      
      fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); 
       
      JLabel meinlabel = new JLabel("irgendein Text"); 
      fenster.add(meinlabel); 
       
       meinlabel.addMouseListener 
       ( 
          new MouseAdapter() 
          { 
             public void mouseClicked(MouseEvent event) 
             { 
                fenster.setSize(500,500); // <- funktioniert nicht 
                //System.exit(1); <- das schon 
             } 
          } 
       ); 
       
      fenster.setSize(300,200); 
      fenster.setVisible(true); 
   } 
}

So läuft es, nachdem ich einige Imports hinzufügen musste.
Ich habe das Programm allerdings nicht an geltende Konventionen angepasst.
Da du fenster in main() erzeugst, darfst du es nicht in einer Unterklasse, in main() definiert oder nicht, verwenden.

Edit: Immer ist jemand anders schneller. :wink:
 

Kira

Neues Mitglied
merlin2 hat gesagt.:
Code:
So läuft es, nachdem ich einige Imports hinzufügen musste.
Ich habe das Programm allerdings nicht an geltende Konventionen angepasst.
Da du fenster in main() erzeugst, darfst du es nicht in einer Unterklasse, in main() definiert oder nicht, verwenden.

Edit: Immer ist jemand anders schneller. :wink:[/quote]

Erstmal sorry wegen der imports, ich wollte den Code etwas kürzen.
Dank eurer Hilfe funktioniert es nun. Ich verstehe aber nicht, warum nich das Fenster nicht in main() verwenden darf. Warum muss ich dafür eine neue Klasse erstellen (von JFrame abgeleitet)?
 
S

SlaterB

Gast
musst du nicht, du musst nur die Variable final machen,
sonst ist Java das zu vage (der Inhalt einer Variablen kann sich ändern)
 
G

Guest

Gast
SlaterB hat gesagt.:
musst du nicht, du musst nur die Variable final machen,
sonst ist Java das zu vage (der Inhalt einer Variablen kann sich ändern)

öhhh... das problem ist imho das man aus prinzip nicht aus statischen methoden auf instanzvariablen derselben klasse zugreifen darf oder gar deren nicht statische funktion aufrufen darf. das macht auch überhaupt keinen sinn! so ist ja gar nicht klar von welcher instanz die variable gesetzt/ welche methode aufgerufen werden soll!

alles klar :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
K Dinge wie ein Eventlistener Java Basics - Anfänger-Themen 4
K Übergabe einer im EventListener definierte variablen Java Basics - Anfänger-Themen 2
S Java GUI: Probleme mit EventListener und actionPerformed Java Basics - Anfänger-Themen 3
G JFileChooser EventListener auf Öffnen Button Java Basics - Anfänger-Themen 3
G im Eventlistener ne JTable erstellen Java Basics - Anfänger-Themen 4
H Imports bei GUIs mit EventListener Java Basics - Anfänger-Themen 2
E Einrücken inner der toString()-Methode Java Basics - Anfänger-Themen 34
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
Phil42 "Local variable i is accessed from within inner class" Java Basics - Anfänger-Themen 3
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
R inner class Java Basics - Anfänger-Themen 15
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
T Jar: Zugriff auf Dateien inner- unter außerhalb d. jar-Files Java Basics - Anfänger-Themen 3
H local variable . is accessed from within inner class Java Basics - Anfänger-Themen 10
G Inner class Java Basics - Anfänger-Themen 4
T IntelliJ / SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". Java Basics - Anfänger-Themen 4
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
123456789sssssaaaa Java Wrapper Class Java Basics - Anfänger-Themen 13
FHEFHJHFJH error: class names, 'summe_bsp', are only accepted if annotation processing is explicitly requested Java Basics - Anfänger-Themen 3
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
G Could not initialize class “NoClassDefFoundError" Java Basics - Anfänger-Themen 2
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
O Verständniss Problem bei abstract class Java Basics - Anfänger-Themen 7
H .class Datei wird nicht ausgeführt Java Basics - Anfänger-Themen 2
H .jar unterschied .class Java Basics - Anfänger-Themen 3
J class version 52 und 56 Java Basics - Anfänger-Themen 6
L Fehler bei der AUsführung der .class Datei Java Basics - Anfänger-Themen 23
A Class not found - Jar liegt am classpath Java Basics - Anfänger-Themen 2
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
D jsoup get class name mit leerzeichen Java Basics - Anfänger-Themen 7
D doc.seect jsouo bestimmtes class element finden Java Basics - Anfänger-Themen 1
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
N Fehlende .class Datei Java Basics - Anfänger-Themen 4
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
W Externe class in Eclipse importieren Java Basics - Anfänger-Themen 0
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
L jar, class, java und wieder zurück Java Basics - Anfänger-Themen 8
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
L Classpath Zwei Bibliotheken enthalten gleiche .class Datei Java Basics - Anfänger-Themen 6
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
wilmaed protected class Java Basics - Anfänger-Themen 0
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9
N class in class Java Basics - Anfänger-Themen 13
B Linux - Error: Could not find or load main class application.Main Java Basics - Anfänger-Themen 28
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
P could not find main class obwohl da Java Basics - Anfänger-Themen 17
UnityFriday method getPrevious in class List<ContentType> cannot be applied to given types Java Basics - Anfänger-Themen 29
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
D Compiler-Fehler error: .class expected Java Basics - Anfänger-Themen 2
S Dataflow von Start bis die SystemProperties class Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
M Scanner class Java Basics - Anfänger-Themen 6
A attach source: Zusammenhang zwischen JAR und .class/.java Dateien? Java Basics - Anfänger-Themen 2
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
C Klassen Class Files nachladen (mehrer .jar Dateien) Java Basics - Anfänger-Themen 2
P Compiler-Fehler Could not load or find main class fehler Java Basics - Anfänger-Themen 15
J Gestaltung der GUI.class Java Basics - Anfänger-Themen 1
P Compiler-Fehler could not find or load main class Java Basics - Anfänger-Themen 5
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
S Class Dateien decompilieren Java Basics - Anfänger-Themen 4
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
S Vererbung Fehlermeldung: the hierarchy of the type "class name" is inconsistent Java Basics - Anfänger-Themen 10
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
M Class Datein aus einen Unterordner verwenden Java Basics - Anfänger-Themen 2
B .class-File mit Reflection auslesen Java Basics - Anfänger-Themen 8
C class in main aufrufen (SWT Oberfläche) Java Basics - Anfänger-Themen 5
P Compiler-Fehler .java Dateien kompilieren und .class Dateien zur .jar Java Basics - Anfänger-Themen 4
D error: Class names, >>>HILFE, anfänger<<< Java Basics - Anfänger-Themen 4
M Class nach Namensänderung nicht mehr vorhanden Java Basics - Anfänger-Themen 6
P .class 2 .exe ? Java Basics - Anfänger-Themen 5
N Compiler-Fehler HundTestlauf class Fehler Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben