Swing remove(JPanel) funktioniert nicht

KingOfExceptions

Bekanntes Mitglied
Hallo community,

ich hab ein Problem. Ich benutze JMenus um verschiedene Panels anzuzeigen. Damit diese sich jedoch nicht überlappen, benutze ich
Code:
remove(JPanel);
. Hier mal ein Ausschnitt von meinem Code:

Java:
JTextField	nameField;
	JTextField	dateField;
	JTextField	anzahlKartonsField;
	JPanel		mainPanel1	= new JPanel();
	JPanel		mainPanel2	= new JPanel();
	JTextField	field;

	private void makeMenus()
	{
		final JMenuBar bar = new JMenuBar();
		JMenu datei = new JMenu("Fichier");
		JMenu suchen = new JMenu("Chercher");
		JMenu suchenKlient = new JMenu("Chercher client");
		JMenuItem neuerKlient = new JMenuItem("Nouveau client");
		JMenuItem exit = new JMenuItem("Quitter");
		JMenuItem suchenKlientName = new JMenuItem("Par nom");
		JMenuItem suchenKlientNummer = new JMenuItem("Par numero de client");
		JMenuItem suchenKlientNummerVertrag = new JMenuItem("Par numero de contrat");
		bar.add(datei);
		bar.add(suchen);
		datei.add(neuerKlient);
		datei.add(exit);
		suchen.add(suchenKlient);
		suchenKlient.add(suchenKlientName);
		suchenKlient.add(suchenKlientNummer);
		suchenKlient.add(suchenKlientNummerVertrag);
		neuerKlient.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent evt)
			{
				getContentPane().remove(mainPanel1);
				getContentPane().invalidate();
				getContentPane().validate();
				getContentPane().remove(mainPanel2);
				getContentPane().validate();
				
				JButton go = new JButton("Creer nouveau client");
				go.addActionListener(new GoButtonListener());
				JLabel nameLabel = new JLabel("Nom");
				JLabel dateLabel = new JLabel("Date du contrat");
				JLabel anzahlKartonsLabel = new JLabel("Nombre de Tonnage");
				nameField = new JTextField(20);
				dateField = new JTextField(20);
				anzahlKartonsField = new JTextField(20);
				mainPanel1.setLayout(new GridLayout(4, 2));
				mainPanel1.add(nameLabel);
				mainPanel1.add(nameField);
				mainPanel1.add(dateLabel);
				mainPanel1.add(dateField);
				mainPanel1.add(anzahlKartonsLabel);
				mainPanel1.add(anzahlKartonsField);
				mainPanel1.add(new JLabel("")); // GLUE
				mainPanel1.add(go);
				getContentPane().add(mainPanel1);
				getContentPane().invalidate();
				getContentPane().validate();
			}
		});

wenn ich das jetzt zweimal aufrufe, überlappt sich das alles und wird zu einem großen kuddelmuddel ;(
kann mir da jemand helfen?
Das mit dem
Code:
invalidate();
hab ich in einem anderen Forum gelesen, ich weiß nicht was das soll, genau das gleiche mit dem
Code:
getContentPane()
:rtfm:

Kann mir da jemand helfen, damit das JPane davor weggemacht und wieder hinzugefügt werden kann?
 
Das [c]getContentPane()[/c] ist die Mthode von JFrame, irgendwo im Code müsste JFrame instanziert sein oder implementiert, dann könnte man z.B. [c]JFrame frame = new JFrame();[/c] schreiben und [c]frame[/c] benutzen ?

Probiermal überall nach [c]remove[/c] , [c]validate zu setzen ?
 
Überleg doch mal, ist das nicht schrecklich viel arbeit, jedes mal wenn der Benutzer auf ein Menü klickt wieder neu die GUI zusammenzubauen? Der arme computer! Wär doch viel leichter wenn die Panels einmal gespeichert und dann je nachdem angezeigt werden. Dafür gibts das CardLayout.
 
zum eigentlichen Fehler:
das mainPanel1 muss noch mit removeAll() geleert werden, enthält die alten JLabel & Co.
 

Neue Themen


Zurück
Oben