Zweites JFrame in JPanel öffnen

Hallo Community,

ich hab da ein anliegen in Swing.

Ich habe ein JFrame, in diesen JFrame werden bzw. sollten eigentlich nur die JPanel ausgetauscht werden. Sprich der Benutzer macht eine Interaktion also soll das nächste JPanel angezeigt werden.

Nun ist es so das wenn man auf weiter klickt das JPanel 1 weiter da bleibt und das JPanel 2 quasi darunter gezeichnet wird (kann man erkennen wenn man das Fenster dann breiter zieht).

Hier nun ein wenig Code:

Hier wird die Anwendung initialisiert:

	JFrame frame = MainFrame.getInstance();
	MainWindow main = MainWindow.getInstance(); //JFrame in den die JPanels gezeichnet werden 
	frame.add(main.createApplicationFrame());
	JMenuBar menubar = main.createMenuBar();
	frame.setJMenuBar(menubar);
	frame.setLocationRelativeTo(null);
	frame.setBounds(100, 100, 500, 400);
	frame.setVisible(true);

wenn der Benutzer nun einen Button betätigt wird folgender Code ausgeführt:

	MainWindow mainW = MainWindow.getInstance();
	mainW.setVisible(false);
	MainFrame.getInstance().remove(mainW); 
	MainFrame.getInstance().add(previewPanel.createPreviewFrame(preparedString));
	MainFrame.getInstance().revalidate();
	MainFrame.getInstance().repaint();
	MainFrame.getInstance().setVisible(true);

Ich komm nicht weiter, hab keine Ahnung woran es liegen kann das da das erste JPanel weiter angezeigt wird.

Für jede Hilfe/Tipps/Anregungen wäre ich sehr Dankbar.

Gruß
Mad

Mittels CardLayout lassen sich relativ einfach Komponenten “austauschen”.
CardLayout

Tatsächlich sollte man es sogar vermeiden zur Laufzeit in schon angezeigten graphischen Komponenten neue zu initialiseren und anzeigen zu lassen.

Anhand des Threatitels würde ich zu InternalFrames raten, aber anhand deiner Beschreibung rate ich dir auch zum CardLayout

Hallo, Danke euch für die Antworten.

Ich hab das nun soweit in mit den CardLayout implementiert, nur so richtig laufen will das nicht.

Ich hab eine Klasse in der ich ähnlich wie hier: http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/CardLayoutDemoProject/src/layout/CardLayoutDemo.java aufbaue.

In meiner HandlerKlasse hab ich dann folgendes stehen:

                CardLayout cl = (CardLayout)(MainFrame.getCards().getLayout());
		cl.show(MainFrame.getCards(), "Preview");
		MainFrame.getCards().revalidate();

doch bereits dort hab ich nur noch ein Objekt in der “getCards()” Methode.

die MainFrame sieht wie folgt aus:

public class MainFrame
{
	private static final JPanel cards = new JPanel(new CardLayout());
	
	public MainFrame() {}
	
	public void addComponentToPane(Container pane) {
		JPanel mainWin = MainWindow.getInstance().createApplicationFrame();
		JPanel previewWin = PreviewWindow.getInstance().createPreviewFrame();
         
        cards.add(previewWin, "Preview");
        cards.add(mainWin, "Main");

        pane.add(previewWin);
        pane.add(mainWin);
    }


		public static JPanel getCards()
		{
			return cards;
		}
	
}

nur hab ich wieder mal keine Ahnung was da schief läuft.

Die JPanel Cards ist static und wird ja bereits zum Start gefüllt. Die Values sind ja auch richtig gesetzt.

Bin gerade echt überfragt. Ich hatte es auch schon versucht den Listener des Buttons auf die MainFrame Klasse zusetzen (mit entsprechender Methode dann in der MainFrame Klasse) hat aber auch nicht geklappt.

Ein revalidate ist unnötig, darum kümmert sich das CardLayout.

[QUOTE=Madlip;65007]``` cards.add(previewWin, „Preview“);
cards.add(mainWin, „Main“);

    pane.add(previewWin);
    pane.add(mainWin);```[/QUOTE]

Komponenten dürfen nur zu einem Container hinzugefügt werden. Hier sollte wohl eher cards dem pane hinzugefügt werden.

Neben diesem static scheinst Du auch viele Singletons zu nutzen? Ich gehöre eigentlich nicht zu den Leuten die das Singleton Pattern verteufeln, aber im GUI Bereich sehe ich aber auch keinen vernünftigen Grund der deren Einsatz rechtfertigt.
Grundsätzlich würde ich versuchen möglichst ohne static auszukommen. I.d.R. ist es unnötig und macht die ganze Applikation eher fehleranfälliger.

[QUOTE=_Michael;65011]
Komponenten dürfen nur zu einem Container hinzugefügt werden. Hier sollte wohl eher cards dem pane hinzugefügt werden.[/QUOTE]

Super, genau das war es. Vielen Dank.

Das mit den static werde ich nun auch versuchen auszumerzen, genauso wie die Singleton-Geschichte. Aber vielen lieben Dank erst einmal.