Probleme beim entfernen eines JPanels

NoWitzness

Mitglied
Hallo wieder mal!

Ich hab da ein Problem, andem ich mir jetzt schon seit Tagen!!! die Zähne ausbeiss ..

Ich habe ein JFrame das als ContentPane ein CardLayout Panel hat - das contentCardPanel.
Auf diesem wird beim erzeugen des Frames ein weiteres Panel (spielePanel) hinzugefügt und damit das Frame fertig aufgebaut.

Beim klick auf den Button "zur Übersicht", wird das spielePanel removet und ein "uebersichtPanel" stattdessen angezeigt - das funtkioniert super!

wenn ich aber aus der Übersicht den umgekehrten Weg machen will, also "zurueck" drücke und die selbe Prozedur durchmache wie von Spiele --> Übersicht, funkt das nicht.
Egal mit was ich es schon versucht habe ..
removeAll(); remove(), validate(), invalidate(); revalidate(), repaint() setVisible(true/false) usw...
Ich denke mittlerweile habe ich jede nur erdenkliche kombination der oben stehenden Methoden eingesetzt ... no way ... das blöde panel verschwindet sicht ...

Das passiert alles in einem Listener mit denselben objekten usw. auf dem Frame ...
Die VM weiss auch damit ich den Button klick weil ein Systm.Out.Println(".....") ausgegeben wird wenn ich den Button drücke.

wieso wird mir das eine panel problemlos gelöscht und das andere nicht? Ist doch alles im selben Frame..

mit dem funkts
Java:
else if(e.getSource() == uebersicht){
                System.out.println("Test");
		wk.zusammenStellen(uebersichtPanel);
		jFrame.getContentPane().remove(spielePanel);
		jFrame.getContentPane().add(uebersichtPanel);
		jFrame.getContentPane().validate();
}

mit dem nicht ..
Java:
if(e.getSource() == zurueck){
                System.out.println("Test");
 		jFrame.getContentPane().remove(uebersichtPanel);
		jFrame.getContentPane().add(spielePanel);
	        jFrame.getContentPane().validate();
}


Biiiiiiiiitttteeee helft mir da weiter ... sonst muss ich den verdammten Laptop ausn Fenster kicken ..
macht echt kein Spass mehr ;(;(;(
 
Zuletzt bearbeitet:
Versuch es doch mal mit revalidate()

Gruss

Claus

hab ich leider nur vergessen dazu zu schreiben. Hab ich natürlich auch vielfach in verschiedensten varianten versucht einzusetzen. das Panel wird einfach nicht entfernt ...

hast du oder Ihr vielleicht noch einen anderen Lösungsvorschlag??? Ist doch nicht möglich dass das Ding da nicht weg will...
 
Ich gebe zu, das ich dein Problem nicht verstehe???:L
Ein Cardlayout zeigt doch immer nur ein JPanel von mehreren an. Daher verstehe ich nicht, warum du etwas removen möchtest? Du zeigst einfach das JPanel nicht mehr an und springst da drüber.

Vielleicht hilft ja das Tutorial weiter?

Ich habe mal eine kleine Demo gemacht, wo man per Klick zwischen den beiden JPanels umschalten kann. Ich habe bisher mit JTabbedPane gearbeitet, wenn ich zwischen mehreren JPanels umschalten wollte. Vielleicht ist das einen Blick wert?

Java:
import java.awt.CardLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Card {

	public static void main(String[] args) {
		JFrame frame = new JFrame("CardTurtle");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel cardPanel = new JPanel(new CardLayout());
		JPanel uebersichtPanel = new JPanel(); // Card 1
		JPanel spielePanel = new JPanel(); // Card 2
		uebersichtPanel.add(new JLabel("Card 1"));
		JButton btnZeige2 = new JButton("zeige 2");
		btnZeige2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) cardPanel.getLayout();
				layout.show(cardPanel, "Card 2");
			}
		});

		uebersichtPanel.add(btnZeige2);
		cardPanel.add(uebersichtPanel);
		cardPanel.getLayout().addLayoutComponent("Card 1", uebersichtPanel);
		//
		spielePanel.add(new JLabel("Card 2"));
		JButton btnZeige1 = new JButton("zeige 1");
		btnZeige1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				CardLayout layout = (CardLayout) cardPanel.getLayout();
				layout.show(cardPanel, "Card 1");
			}
		});
		spielePanel.add(btnZeige1);
		cardPanel.add(spielePanel);
		cardPanel.getLayout().addLayoutComponent("Card 2", spielePanel);
		frame.add(cardPanel);
		frame.pack();
		frame.setVisible(true);
	}
}
 
Grundsätzlich sollte man ein JPanel nicht removen, weil sonst alles abspackt, wie es wahrscheinlich bei dir der Fall ist. Hierfür ist wie eben schon erwähnt das CardLayout perfekt geeignet. Dort muss man die Panels auch nicht mehr removen
 

Zurück
Oben