JPanel mit anderem JPanel ersetzen

enHanced

Mitglied
Guten Tag,

ich habe ein JFrame welches ein JPanel ( jPanel1) beinhaltet.
Nun möchte ich bei einem bestimmten Event dieses JPanel durch ein anderes ersetzen.. dies (dachte ich zumindest) funktioniert so:

Java:
        jPanel1 = new jPanel2(); // Referenz auf neues JPanel-Objekt setzen
        validate(); // JFrame neu validieren...


Tut es aber nicht... wo liegt mein Denkfehler ?

Grüße,
Benjamin
 
Du könntest das auch mit CardLayout lösen. Da liegen mehrere Panel wie ein Kartenstapel übereinander und können dann wahlweise angezeigt werden.
 
dein Fehler liegt darin, dass du der Variablen jPanel1 eine unangemessene Bedeutung zutraust


ich bemühe mal wieder ein schönes Real-Beispiel:
- du kaufst einen (Papier-)Kalender (Variable deklarieren)
- du trägst in deinen Kalender einen Termin für eine Besprechung ein (Variable mit Panel-Objekt befüllen)
- du teilst das allen Teilnehmern mit, mietest einen Raum usw. (Panel in die GUI einfügen, Layout, usw.)
[... es vergehen 3 Stunden ... ]
- du trägst in deinen Kalender einen anderen Termin ein, streichst den alten raus (Variable mit neuen Panel-Objekt befüllen)

-> alle anderen gehen trotzdem zum alten Termin,
wo liegt dein Fehler?
 
in Abhänigkeit der Komplexität deiner Anwednung, kannst du natürlich auch nur das einem Panel dem Frame entfernen und dann ein neues hinzufügen...

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class PanelChangeExample {
	public static void main(String[] args) {
		new PanelChangeExample();
	}

	private int i = 1;
	JPanel blue;
	JPanel red;
	JFrame f;

	public PanelChangeExample() {
		blue = new JPanel();
		blue.setBackground(Color.blue);
		red = new JPanel();
		red.setBackground(Color.red);
		f = new JFrame();
		f.add(blue);
		JButton b = new JButton("Wechsel auf rot");
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				f.remove(blue);
				f.add(red);
				f.validate();

			}
		});
		f.add(b, BorderLayout.SOUTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setSize(300, 300);
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}

}
 

Zurück
Oben