MouseAdapter - auf Funktionen zugreifen

Michael...

Top Contributor
Wie kann ich in einem MouseAdapter auf Methoden der übergeordneten Klasse oder auf Klassenvariabeln zugreifen?

Was heisst hier übergeordnet?
Ist der MouseAdapter eine anonyme innere Klasse, dann kann man darin auf alle Methoden und alle globalen Variablen der Klasse zu greifen.
Handelt es sich dabei um eine eigenständige Klasse, dann benötigt er eine Referenz auf ein Objekt der Klasse.

Vielleicht macht ein Codeausschnitt Deine Frage deutlicher.
 
S

SlaterB

Gast
bei überschreibenen Methoden gibts noch den Trick,
super.methodename(parameter);
aufzurufen, um dort ranzukommen,

MouseAdapter für sich ist aber ein schlechtes Beispiel, hat der doch schließlich nur leere Methoden und keine Klassenvariablen
 

Marco13

Top Contributor
Mein Kristallkugel sagt, dass es auch das hier sein könnte...:
Code:
class SomeClass
{
    private int something = 123;

    void method()
    {
        MouseAdapter a = new MouseAdapter()
        {
            public void mouseMoved(MouseEvent e)
            {
                [b]SomeClass.this[/b].something = 234; // <----------- 
            }
        };
    }
}
 

Marco7757

Aktives Mitglied
Tut mir leid, dass ich den Codeausschnitt vergessen habe. Also das Ganze sieht so aus:

Java:
panel.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent arg0) {
				// TODO Auto-generated method stub
				panel.setBackground(Color.lightGray);
			}});
		return panel;
	}

Das Panel 'panel' wird in einer Methode der Klasse 'card' erstellt. In meiner Main-Klasse instanziere ich diese Klasse 'card' und füge dann mittels dieser Methode ein Panel hinzu. Wenn man auf das Panel klickt, sollen Daten aus der Klasse 'card' (das Panel ist ein Objekt) ausgelesen und einem Array hinzugefügt werden, der in der Main-Klasse erstellt worden ist.

Main:
Java:
public class play extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//CODE
		
		int[] setted = new int[3];

		//CODE
		
		for(int y = 1;y<=7;y++) {
			for(int x = 1;x<=7;x++) {
				//HINZUFÜGEN DES PANELS, BEI KLICK AUF PANEL SOLL DER ARRAY SETTED MIT EINIGEN INFORMATIONEN IN FORM VON INTEGER-ZAHLEN GEFÜLLT WERDEN!
cards[z] = new card();
				JPanel card = cards[z].add_card(z, x, y);
				play.add(card);
			}
		}
		//CODE
	}

}

Mein Ziel ist es jetzt also, mit einem MouseAdapter, der auf ein Panel gelegt wird, welches in einer anderen Datei/Klasse erzeugt wird und erst in der Hauptklasse dem Hauptfenster hinzugefügt wird, auf einen Array zuzugreifen, der ebenfalls in der Hauptklasse erstellt wird und dann Daten in ihm zu speichern.
Das Panel sollte, wenn ich mich richtig in JAVA eingelesen habe, ein Objekt sein. Es werden 49 Objekte erstellt und für alle die Koordinaten im Grid-Netz gespeichert! (x und y). Auf diese will ich später zugreifen!
 
Zuletzt bearbeitet:

Marco7757

Aktives Mitglied
Mein Kristallkugel sagt, dass es auch das hier sein könnte...:
Code:
class SomeClass
{
    private int something = 123;

    void method()
    {
        MouseAdapter a = new MouseAdapter()
        {
            public void mouseMoved(MouseEvent e)
            {
                [b]SomeClass.this[/b].something = 234; // <----------- 
            }
        };
    }
}

Genau! Ok, danke, auf die Daten kann ich nun zugreifen! Doch wie übergebe ich sie meinem Array in der Haupt-Klasse?
 

Michael...

Top Contributor
Mein Ziel ist es jetzt also, mit einem MouseAdapter, der auf ein Panel gelegt wird, welches in einer anderen Datei/Klasse erzeugt wird und erst in der Hauptklasse dem Hauptfenster hinzugefügt wird, auf einen Array zuzugreifen, der ebenfalls in der Hauptklasse erstellt wird und dann Daten in ihm zu speichern.
Dazu muss die Klasse (mit dem MouseAdapter) eine Referenz auf die Hauptklasse bzw. das entsprechende Array besitzen.
Oder besser noch man erzeugt in der Hauptklasse einen MouseAdapter und übergibt diesen den Panels oder was auch immer.
 

Marco7757

Aktives Mitglied
Nun gut, ich habe meinen MouseAdapter nun in die Hauptklasse verschoben. Doch jetzt kann ich nicht auf mein Panel zugreifen. Es will immer 'final' vornehin setzen? Weshalb? (Zeile 6)

Ausserdem sind meine Objekte in einem Array gespeichert. Als Zähler dient die Variable z. Doch auch die will Eclipse final ... Wieso? (Zeile 8-10)

Java:
card.addMouseListener(new MouseAdapter() {

					@Override
					public void mouseClicked(MouseEvent arg0) {
						// TODO Auto-generated method stub
						card.setBackground(Color.lightGray);
						int[] set = new int[3];
						set[0] = cards[z].value;
						set[1] = cards[z].x;
						set[2] = cards[z].y;
						setted[setted[0][0]][0] = set[0]; //INHALT
						setted[setted[0][0]][1] = set[1]; //X-KOORDINATE
						setted[setted[0][0]][2] = set[2]; //Y-KOORDINATE
						setted[0][0]++;
					}});
Erstellt werden die Objekte so:
Java:
cards[z] = new card();
				JPanel card = cards[z].add_card(z, x, y);

Vorher war der MouseAdapter in einer Methode die von add_card aufgerufen wurde!

Fehlermeldung ist diese:
Description Resource Path Location Type
Cannot refer to a non-final variable card inside an inner class defined in a different method play.java /Cardgame/src/Game line 48 Java Problem
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ohne jetzt den Kontext zu kennen: Meistens reichen kleine "finale Helper"
Code:
for (int i=0; i<10; i++)
{
    ... someInnerClass ...
    {
        // Hier wird das i benötigt, aber final
        doSomethingWith(i);
    }
}
dann kann man einfach sowas machen
Code:
for (int i=0; i<10; i++)
{
    final int finalValue = i;
    ... someInnerClass ...
    {
        // Hier wird das i benötigt, aber final
        doSomethingWith(finalValue);
    }
}
 

Marco7757

Aktives Mitglied
Cool! Vielen Dank, es funktioniert prima!

Es geht jetzt alles soweit! Vielen Dank!

Wisst ihr, ob man in Java einen ganzen Array einfach leeren und wieder zurücksetzen kann (mehrdimensional)?
 

Michael...

Top Contributor
Die Meldung bekommt man in der Regel, wenn man in einer inneren Klasse auf eine nicht globale Variable zu greifen will. In Deinem Fall ist card vermutlich nur eine lokale Variable innerhalb der Methode in der Du den den MouseAdapter erzeugst.
Vermutlich schaut es bei Dir in etwa so aus:
Java:
    JPanel card = new JPanel();
    card.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent arg0) {
         card.setBackground(Color.lightGray);
...


und das da ist auch recht merkwürdig
Java:
		int[] set = new int[3];
		set[0] = cards[z].value;
		set[1] = cards[z].x;
		set[2] = cards[z].y;
		setted[setted[0][0]][0] = set[0]; //INHALT
		setted[setted[0][0]][1] = set[1]; //X-KOORDINATE
		setted[setted[0][0]][2] = set[2]; //Y-KOORDINATE
 

Michael...

Top Contributor
Was soll daran merkwürdig sein, ausser dass ich drei überflüssige Zeilen habe?
Davon mal abgesehen.

Mit merkwürdig meinte ich speziell sowas:
Java:
setted[setted[0][0]][0] = set[0];
Du scheinst setted[0][0] als Zählvariable zu benutzten, wobei setted - sofern ich das richtig verstehe - eigentlich ja ein "Informationsspeicher" sein soll.

Wenn ich jetzt davon ausgehe, das setted[0][0] zu Beginn 0 ist und card[z].value bzw. set[0] z.B. 5 ist, dann würde das folgendes bedeuten:
Zeile 11: setted[setted[0][0]][0] = set[0];
entspricht, da in dem Bsp. setted[0][0] = 0
setted[0][0] = set[0];
-->setted[0][0] = 5
In der darauf folgenden Zeile kommt dann:
Zeile 12: setted[setted[0][0]][1] = set[1];
entspricht setted[5][0] = set[0];

Und da bin ich mir nicht sicher, ob Du sowas willst.
 

Marco7757

Aktives Mitglied
Da liegt ein kleiner Fehler vor! Ich schreibe zur Zeit noch nicht allzu komplexe Programme, und da kann man sich solche kleinen "Unschönheiten" auch mal leisten. Der Zähler beginnt nämlich bei 1, wobei die Zählervariable dann nie überschrieben wird ...

Ich habe inzwischen jedoch meinen Code optimiert und diese Variable kommt jetzt nicht mehr vor!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C MouseAdapter und Arraylist Java Basics - Anfänger-Themen 5
C OOP MouseAdapter Parameter mitgeben Java Basics - Anfänger-Themen 2
B Erste Schritte Bisektion mit zwei Funktionen? Java Basics - Anfänger-Themen 1
J Verständnisfrage zu throws neben Funktionen Java Basics - Anfänger-Themen 2
A Variablen Definitionen zu Codes und Funktionen. Java Basics - Anfänger-Themen 3
Z If Funktionen, GUI, Fachklasse Java Basics - Anfänger-Themen 25
H Frage zu Methoden/Funktionen Java Basics - Anfänger-Themen 3
M Vererbung Funktionen in Basisklasse deklarieren Java Basics - Anfänger-Themen 4
J Funktionen auf der Rückgabe eines Stacks (pop) Java Basics - Anfänger-Themen 6
J Funktionen Java Basics - Anfänger-Themen 9
S Klassen Class mit Funktionen importieren Java Basics - Anfänger-Themen 1
B Funktionen von außen aufrufen Java Basics - Anfänger-Themen 1
M Klassen Funktionen aus anderen Klassen benutzen Java Basics - Anfänger-Themen 3
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
R Funktionen Synchron laufen lassen Java Basics - Anfänger-Themen 10
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
S Welche Datenstruktur ist die optimalste um Funktionen fuer bestimmte Wertebereiche abzurufen..? Java Basics - Anfänger-Themen 5
A ganzrationale funktionen auswerten. Java Basics - Anfänger-Themen 1
S Funktionen/Atrribute nur innerhalb einer package Zugänglich machen Java Basics - Anfänger-Themen 8
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10
S Funktionen zeichnen Java Basics - Anfänger-Themen 2
K Methoden Funktionen und Prozeduren Java Basics - Anfänger-Themen 11
R Rekursionen und Funktionen ... Java Basics - Anfänger-Themen 8
J Funktionen automatisiert aufrufen Java Basics - Anfänger-Themen 5
B Funktionen programmieren, die im Hintergrund aktiv sind Java Basics - Anfänger-Themen 2
O Funktionen dateiübergreifend mit Packages Java Basics - Anfänger-Themen 6
S Parameterübergabe - identische Funktionen, aber falsche Funktion Java Basics - Anfänger-Themen 5
M Methoden Funktionen Java Basics - Anfänger-Themen 6
M Erste Schritte Fenster Und VB Funktionen Java Basics - Anfänger-Themen 8
G Aufruf externer Funktionen Java Basics - Anfänger-Themen 7
J Aufruf von Funktionen in *.jar mittels Eclipse Java Basics - Anfänger-Themen 4
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
B Ausgabe problem in Funktionen Java Basics - Anfänger-Themen 6
L Hat java keine virtuellen funktionen?? Java Basics - Anfänger-Themen 6
A Funktionen und Arrays Java Basics - Anfänger-Themen 2
C funktionen nur static? Java Basics - Anfänger-Themen 6
L Funktionen addRow und deleteRow Java Basics - Anfänger-Themen 6
D Mathematische Funktionen Zeichnen Java Basics - Anfänger-Themen 2
D Variableninhalt über mehrere Funktionen ? Java Basics - Anfänger-Themen 3
Out.println Funktionen Java Basics - Anfänger-Themen 7
D Verständnisfrage zu Funktionen Java Basics - Anfänger-Themen 6
B Mathematische Funktionen Java Basics - Anfänger-Themen 3
D Warum sollte ich bestehende Funktionen "extend"en? Java Basics - Anfänger-Themen 32
M Statische und nicht-statische Funktionen: Desktop.browse(uri); Java Basics - Anfänger-Themen 4
N Funktionen berechnen in Java Java Basics - Anfänger-Themen 18
Kasoki Eigene Funktionen / Commands Java Basics - Anfänger-Themen 14
Q Nach Stringvorgabe bestimmte funktionen ausführen Java Basics - Anfänger-Themen 3
K zwei Funktionen, ein BufferedReader? Java Basics - Anfänger-Themen 8
A Static in Funktionen bringen Java Basics - Anfänger-Themen 7
J Funktionen in Java? Java Basics - Anfänger-Themen 3
A frage zur integration von funktionen anderer klassen Java Basics - Anfänger-Themen 2
T Funktionen Plotter - Klassen/Methoden/Funktionen Java Basics - Anfänger-Themen 13
A ChatGUI: Scrollbar und Funktionen Java Basics - Anfänger-Themen 5
S wann static Funktionen wann nicht Java Basics - Anfänger-Themen 6
W Funktionen mit Default werten Java Basics - Anfänger-Themen 10
G Müssen globale Funktionen immer "static" sein? Java Basics - Anfänger-Themen 13
S Überladen von Funktionen vermeiden Java Basics - Anfänger-Themen 5
B Funktionen ausführen vorm Beenden des Programmes Java Basics - Anfänger-Themen 13
M Mathematische Funktionen zeichnen. Java Basics - Anfänger-Themen 2
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
G Funktionen? Java Basics - Anfänger-Themen 7
S 2 regex-Funktionen benötigt Java Basics - Anfänger-Themen 4
S anzahl von funktionen Java Basics - Anfänger-Themen 9
B in der .Jar funktionieren nicht alle Funktionen Java Basics - Anfänger-Themen 18
X Threads+Funktionen Java Basics - Anfänger-Themen 6
S Explorer funktionen nachprogrammieren Java Basics - Anfänger-Themen 2
P Rexex - stringtokenizer - String funktionen allgemein Java Basics - Anfänger-Themen 3
G Problem mit nicht statischen Funktionen Java Basics - Anfänger-Themen 7
S Return bei Funktionen Java Basics - Anfänger-Themen 8
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16
D Funktionen/Methoden/Variablen includieren? :) Java Basics - Anfänger-Themen 4
V funktionen/Variablen f. unterschiedliche Klassen definierne? Java Basics - Anfänger-Themen 6
M mehreren klassen die gleichen funktionen bereitstellen? Java Basics - Anfänger-Themen 3
G Über undo, copy, cat, paste, delete Funktionen Java Basics - Anfänger-Themen 3
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
Niki_Tesla 2 Fragen / Funktionen? Java Basics - Anfänger-Themen 4
B Code von Java-Funktionen einsehen Java Basics - Anfänger-Themen 2
B Mathematische funktionen Berechnen und ausgeben lassen?WIE? Java Basics - Anfänger-Themen 2
H Parameterübergabe zwischen einzelnen Funktionen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
frager2345 Fensterklasse, Wie auf Frame im Listender zugreifen (ItemEvents) Java Basics - Anfänger-Themen 7
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
O Mit Instanz von Oberklasse auf Unterklasse zugreifen Java Basics - Anfänger-Themen 2
S Kann nicht auf die Liste zugreifen mit der Methode!? Java Basics - Anfänger-Themen 3
C Auf die Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 1
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
T Auf Instanz der selben Klasse aus überschriebener Methode in Methode zugreifen. Java Basics - Anfänger-Themen 2
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
itsmejo Erste Schritte Auf Attribut einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 14
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
M Auf erstelltes Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben