Action Verarbeitung im CardLayout

Na_dine

Mitglied
Hallo,
Ich bin gerade dabei meine erste Applikation zu erstellen und hake seit einiger Zeit an einem Problem: ActionListener

Problembeschreibung:
Ich erstelle ein CardLayout in einer Klasse (GUI), den Inhalt der einzelnen Cards erstelle ich in separaten Klassen(so z.B. Hauptmenue, Anleitung ....) in der Klasse GUI wollte ich neben der erstellung des CatdLayouts auch die gesamte ActionVerarbeitung laufen lassen. Nun funktioniert die Actionuebermittlung aus meinen anderen Klassen nicht in die Klasse GUI :-(

Hier meine Klasse des CardLayouts und Action...
Code:
public class GUI implements ActionListener(

protected static CardLayout cards;
Container contentPane;
JPanel anleitung, menue;

public GUI() (
[...]
cards = new CardLayout();
contentPane.setLayout(cards);

menue = new Menue();
anleitung = new Anleitung();
contentPane.add(menue,"eins");
contentPane.add(anleitung,"zwei");

cards.show(contentPane, "eins");
[...]
public void actionPerformed(ActionEvent event)(
String a = event.getActionCommand();
if(a.equals("anleitung")
cards.show(contentPane,"zwei");
)

Hier meine Klasse in der ich den Inhalt fuer die Card "eins", das menue erstelle. Hier befinden sich JButtons, deren ActionListener in Kontakt zur GUI Klasse stehen sollten:

Code:
public class Menue extends JPanel(

static ActionListener action;

public Menue() (
[...]
action = new GUI();

JButton auswahl = new JButton();
auswahl.addActionCommand("anleitung");
auswahl.addActionListener(action);
[...]

der Compiler wirft mir keine Problembeschreibung aus...
Vielen Dank im Vorraus fuer alle Ideen und Anregungen,
Nadine
 
Hallo,

ich kenne dein Programm leider nicht, aber kann es vielleicht sein, dass du vielleicht mehrere Objecte der Klasse GUI hast?

MFG

zEriX
 
Hallo,
Also habe 3 Klassen:
1. GUI: CardLayout in der die Methoden für das anzeigen der einzelnen Karten sind
2. GUIListener: Klasse mit ActionListener und performed Methode zur ActionVerarbeitung
3. Menue: JPanel mit Hauptmenue; besitzt Buttons, die auf mausklick eine neue seite öffnen
sollen.

1.GUI:
Code:
public class GUI  {
  
       	static JFrame f;
	protected static CardLayout cards
	private JPanel menue,anleitung,info,spiel,score, spielfeld;
	Container contentPane;
	
	public GUI(){
(...)
        contentPane = f.getContentPane();
	cards = new CardLayout();
	contentPane.setLayout(cards);

        menue = new Menue();
	anleitung = new Anleitung() ;
        //Cards dem Layout zufügen
	contentPane.add(menue,"eins");
	contentPane.add(anleitung,"zwei");

        cards.show(contentPane, "eins");


public void show(Container contentPane2, String string) {
		cards.show(contentPane,"zwei");
	}

2. GUIListener:
Code:
public class GUIListener implements ActionListener{

GUI karten = new GUI();

	public void actionPerformed(ActionEvent event) {
						
		String a = event.getActionCommand();
		
		if(a.equals("neu"))
		{
			
			karten.show(contentPane, "zwei");
		}

3.Menue
Code:
public class Menue extends JPanel {
	
	static GUIListener action = new GUIListener();
(...)
     JButton neuesSpiel = new JButton();	
     neuesSpiel.setActionCommand("neu");
     neuesSpiel.addActionListener(action);


in 3.(Menue) wird der Button gedrueckt, an dem der ActionListener action registriert ist. der führt zur Klasse GUIListener .... und vergleicht den ActionCommand.
dort folgt eine Anweisung, das über GUI() eine neue Karte "zwei" gezwigt (show) werden soll.
Sicherlich ist in der Klasse GUI die Methode show() falsch implementiert oder wie das heißt, weil dort als Container contentPane2 angezeigt wird.

Icvh hoffe es kann mir jemand helfen wie ich Die Actionverarbeitung zu mlaufen bekomme, Danke schon mal an dieser Stelle :rolleyes:
Nadine
 
Seh ich es richtig das in der Klasse GUI

Code:
 JPanel anleitung, menue;

public GUI() (
[...]
cards = new CardLayout();
contentPane.setLayout(cards);

menue = new Menue();

die Klasse Menu wird gemacht wird
und in der Klasse Menu wird GUI gemacht?

Code:
static ActionListener action;

public Menue() (
[...]
action = new GUI();
 
Jap in der Klasse GUI() wird menue gemacht, weil es ja als JPanel bestandteil des CardLayouts ist.

In der Klasse Menue, soll nicht GUI gemacht werden, sondern lediglich eine Referenz erstellt werden, damit der Compiler weiß in welcher Klasse das CardLayout mit der show() Methode und so ist...

Dieses System andere Klassen und ihre Methoden anrufen... ?
 
Das ist genau wie ich es mir dachte. Du hast zwei Objecte von GUI. Einmal legst du eins in deiner main-Methode an und einmal in deinem Listener.

Das ganze könntest du lösen, wenn du die Klasse GUI als Singleton implementierst.


Java:
public class GUI{

private static GUI instance = null;

private GUI(){
//mach was du willst
}

public static GUI getInstance(){

if(instance == null)
instance = new GUI;

return instance;

}

}


MFG

zEriX
 
Von Singleton habe ich leider noch nie was gehört.
Habe jetzt die action = new GUI() aus dem GUILIstener rausgenommen und in GUI das
reinkopiert, was du mir geschrieben hast.
Mir wird jetzt das new als fehlerhaft unterstrichen

Code:
public class GUI  {

	private static GUI instance = null;
	static JFrame f;
	protected static CardLayout cards;
	private JPanel menue,anleitung,info,spiel,score, spielfeld;
	Container contentPane;
	
	public GUI(){

}
public static GUI getInstance(){
		
		if(instance == null)
		instance = new GUI;
		
		return instance;
		}
 
Ist nicht vielleicht etwas falsch bei den Mthoden erstellen, m ende der GUI() klasse.

Code:
public void show(Container contentPane2, String string) {
	cards.show(contentPane,"zwei");

in den runden Klammern da muesste doch eigentlich was stehen wie:
Code:
public void show( contentPane, "zwei") {
	cards.show(contentPane,"zwei");

oder nicht?
Nur das wenn es so ist wie die untere version, dann habe ich ein haufen von fehlern... :-(

habe ich sonst nicht zwei contentPanes?
 

Neue Beiträge

Zurück