Zugriff auf übergeordnete Klasse

tdc

Bekanntes Mitglied
Hi!
Ich versuche derzeit ein kleines Spiel zu programmieren. Dabei habe ich folgendes Problem: Ich habe eine Klasse GameFrame, dass die zwei JPanels GamePanel und MenuPanel beinhaltet, die jeweils eigene Klassen sind.
Java:
...

public class GameFrame
	extends JFrame
{
	GameFrame()
	{
		GamePanel myGamePanel = new GamePanel(650,600);
		MenuPanel myMenuPanel = new MenuPanel();
		
		...
		
		JPanel MainPanel = new JPanel();
		MainPanel.add(myGamePanel);
		MainPanel.add(myMenuPanel);
		
		this.add(MainPanel);
                ...
Wenn im MenuPanel ein Button angeklickt wird, soll eine Variable im GamePanel geändert werden (ein boolean von false auf true bzw. umgekehrt).
Es ist ja kein Problem vom GameFrame aus auf das GamePanel zuzugreifen und dort die Variable zu ändern. Wie kann ich allerdings vom MenuPanel aus auf das GamePanel zugreifen?
 

André Uhres

Top Contributor
Man kann eine neue Klasse (M) machen, die eine solche Variable enthält und seine Listener informiert, wenn sie ändert (Model). GamePanel registriert sich dort als Listener. Dann macht man noch eine neue Klasse (C), die (M) kennt um dessen Variable auf Anfrage ändern zu können (Controller). Der Controller (C) muss dem MenuPanel bekannt sein. Über sie kann MenuPanel dann bequem die Variable im Model (M) ändern. Sowie das geschieht, informiert das Model (M) seine Listener, also das GamePanel. So einfach ist das :D
 

tdc

Bekanntes Mitglied
Du kannst z.B. dem MenuPanel eine Referenz auf das GamePanel mitgeben.

Das habe ich schon probiert, das Problem ist nur, ich habe in der Klasse GamePanel eine Methode setPause(boolean pause) mit der man die Variable ändern kann. Wenn ich sie dann allerdings in der Klasse MenuPanel mit GamePanel.setPause(true); aufrufen will, ist die Methode nicht bekannt.

Java:
...
public class GamePanel
	extends JPanel implements Runnable, KeyListener
{
        ...
	public void setPause(boolean pause)
	{
		this.pause = pause;
	}
        ...
Java:
...
public class MenuPanel
	extends JPanel implements ActionListener
{
	JPanel GamePanel;
	
	MenuPanel(JPanel GamePanel)
	{
		this.setPreferredSize(new Dimension(150,600));
		this.setLayout(null);
		this.add(BallsLabel());
		this.add(ScoreLabel());
		this.add(ButtonLevelEditor());
		this.add(ButtonEndGame());
		for(int i = 0; i < this.getComponents().length; i++)
		{
			this.getComponents()[i].setFocusable(false);
		}
		this.GamePanel = GamePanel;
	}
	...
	public void actionPerformed(ActionEvent e)
	{
		JButton mysource = (JButton) e.getSource();
		if(mysource.getText() == "Level Editor")
		{
			LevelEditor myLevelEditor = new LevelEditor();
			GamePanel.setPause(true);
		}
		if(mysource.getText() == "Spiel Beenden")
		{
			System.exit(0);
		}
	}
}

Man kann eine neue Klasse (M) machen, die eine solche Variable enthält und seine Listener informiert, wenn sie ändert (Model). GamePanel registriert sich dort als Listener. Dann macht man noch eine neue Klasse (C), die (M) kennt um dessen Variable auf Anfrage ändern zu können (Controller). Der Controller (C) muss dem MenuPanel bekannt sein. Über sie kann MenuPanel dann bequem die Variable im Model (M) ändern. Sowie das geschieht, informiert das Model (M) seine Listener, also das GamePanel. So einfach ist das :D
Ok... ich probiere das mal aus.
 

André Uhres

Top Contributor
Wenn ich sie dann allerdings in der Klasse MenuPanel mit GamePanel.setPause(true); aufrufen will, ist die Methode nicht bekannt.
Java:
JPanel GamePanel;
Klar, weil du's als einfaches "JPanel" deklarierst. "JPanel" kennt ja keine Methode "setPause". Versuch's mal als "GamePanel myGamePanel" ins MenuPanel zu setzen.
Java:
GamePanel myGamePanel;
...
myGamePanel.setPause(true);
 

tdc

Bekanntes Mitglied
Klar, weil du's als einfaches "JPanel" deklarierst. "JPanel" kennt ja keine Methode "setPause". Versuch's mal als "GamePanel myGamePanel" ins MenuPanel zu setzen.
Java:
GamePanel myGamePanel;
...
myGamePanel.setPause(true);

Oh, danke. Jetzt kommt in Eclipse keine Fehlermeldung mehr. Nur wenn ich dann den Button anklicke kommt eine Null-Pointer Exception mit einem Verweis auf
Java:
myGamePanel.setPause(true);
Nur warum sie kommt habe ich keine Ahnung. :bahnhof:
 

tdc

Bekanntes Mitglied
Java:
...
public class GamePanel
	extends JPanel implements Runnable, KeyListener
{
	...
	boolean pause = false;
	...
	public void setPause(boolean pause)
	{
		this.pause = pause;
	}
	...
}

Java:
...
public class MenuPanel
	extends JPanel implements ActionListener
{
	...
	public JButton ButtonLevelEditor()
	{
		JButton ButtonLevelEditor = new JButton("Level Editor");
		ButtonLevelEditor.setBounds(10, 510, 130, 40);
		ButtonLevelEditor.addActionListener(this);
		
		return ButtonLevelEditor;
	}
        ...
	public void actionPerformed(ActionEvent e)
	{
		JButton mysource = (JButton) e.getSource();
		if(mysource.getText() == "Level Editor")
		{
			LevelEditor myLevelEditor = new LevelEditor();
			myGamePanel.setPause(true);
		}
		if(mysource.getText() == "Spiel Beenden")
		{
			System.exit(0);
		}
	}
}
 

eRaaaa

Top Contributor
Der Codeausschnitt hilft wahrscheinlich nicht viel, da du den relevanten Teil weg lässt *g*
Sieht ja so aus als wenn [c]myGamePanel[/c] null ist.

Paar Posts vorher hattest du ja stehen
Java:
 MenuPanel(JPanel GamePanel)
    {
      //.....
        this.GamePanel = GamePanel;
    }

hast du die Zeilen umgeändert ?

MenuPanel(GamePanel gamePanel)
{
//.....
this.myGamePanel = gamePanel;
}

Bzw, zeige doch mal deine aktuelle komplette Klasse MenuPanel!
 
Zuletzt bearbeitet:

tdc

Bekanntes Mitglied
Der Codeausschnitt hilft wahrscheinlich nicht viel, da du den relevanten Teil weg lässt *g*
Stimmt sry.
Bzw, zeige doch mal deine aktuelle komplette Klasse MenuPanel!
Ok.
Java:
package game;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class MenuPanel
	extends JPanel implements ActionListener
{
	GamePanel myGamePanel;
	
	MenuPanel(JPanel GamePanel)
	{
		this.setPreferredSize(new Dimension(150,600));
		this.setLayout(null);
		this.add(BallsLabel());
		this.add(ScoreLabel());
		this.add(ButtonLevelEditor());
		this.add(ButtonEndGame());
		for(int i = 0; i < this.getComponents().length; i++)
		{
			this.getComponents()[i].setFocusable(false);
		}
	}
	
	public JLabel BallsLabel()
	{
		JLabel BallsLabel = new JLabel("Bälle:");
		BallsLabel.setBounds(10, 10, 100, 20);
		
		return BallsLabel;
	}
	
	public JLabel ScoreLabel()
	{
		JLabel ScoreLabel = new JLabel("Punkte:");
		ScoreLabel.setBounds(10, 30, 100, 20);
		
		return ScoreLabel;
	}
	
	public JButton ButtonLevelEditor()
	{
		JButton ButtonLevelEditor = new JButton("Level Editor");
		ButtonLevelEditor.setBounds(10, 510, 130, 40);
		ButtonLevelEditor.addActionListener(this);
		
		return ButtonLevelEditor;
	}
	
	public JButton ButtonEndGame()
	{
		JButton ButtonEndGame = new JButton("Spiel Beenden");
		ButtonEndGame.setBounds(10, 560, 130, 40);
		ButtonEndGame.addActionListener(this);
		
		return ButtonEndGame;
	}

	public void actionPerformed(ActionEvent e)
	{
		JButton mysource = (JButton) e.getSource();
		if(mysource.getText() == "Level Editor")
		{
			LevelEditor myLevelEditor = new LevelEditor();
			myGamePanel.setPause(true);
		}
		if(mysource.getText() == "Spiel Beenden")
		{
			System.exit(0);
		}
	}
}
 

Final_Striker

Top Contributor
Du gibst dem MenuPanel Konstruktor zwar den GamePanel mit, machst aber nichts damit.

Java:
   MenuPanel(JPanel GamePanel)
    {
        this.myGamePanel = GamePanel;

        ...
        ...
        ...
    }

Tipp: Variablen Namen fangen mir einem kleinen Buchstaben an, auch als Parameter.
Anstatt MenuPanel(JPanel GamePanel) lieber MenuPanel(JPanel gamePanel). ;-)
 

eRaaaa

Top Contributor
Wirklich? ich rufe doch die Methode setPause() vom GamePanel auf... ???:L

aber dein GamePanel ist null(du deklarierst das nur) ! Im Moment ist myGamePanel != GamePanel(also das was übergeben wird)


Wie gesagt, ändere deinen Konstruktor wie folgt ab
Java:
MenuPanel(GamePanel gamePanel)
{
//.....
this.myGamePanel = gamePanel;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben