Einfache Anfänger Frage setVisible von Panels

Spin

Top Contributor
Hallo liebe Leute,

ich versuche JPanels zu switchen.
Ich kenne das CardLayout und damit geht es ziemlich einfach aber ich möchte es mal so probieren.
Es will aber nicht.

Woran kann es liegen?

Java:
// center STARTPANEL
		getJContentPane().add(startPanel,BorderLayout.CENTER);
		getJContentPane().add(settingsPanel,BorderLayout.CENTER);

ich habe ein JPanel auf dem die beiden Panels sich befinden.
Dazu habe ich einen Listener der dann das Event abfängt.

Java:
if(source == this.startJButton){
			
			this.setVisible(false); // startpanel
			this.frame.settingsPanel.setVisible(true); // settingspanel
			
			this.frame.validate();
}

Warum geht das nicht?

Liegt es an den Layout Managern, denn aiuf dem jComponent Panel liegen meine Panels via BorderLayout. Das was CENTER liegt will ich nun immer austauschen , danke 🙂
 
Java:
// center STARTPANEL
		getJContentPane().add(startPanel,BorderLayout.CENTER);
		getJContentPane().add(settingsPanel,BorderLayout.CENTER);
Im Center Bereicht eines BorderLayouts kann sich nur eine Komponente befinden. Wird eine neue hineingesetzt fliegt die alte raus.

Ich glaube mich zu erinnern, dass man mit dem GridBagLayout Komponenten übereinander legen mit setVisible deren Sichtbarkeit steuern kann.

Dann gibt's da auch noch JLayeredPane, das GlassPane eines Fensters... je nach Anwendungszweck.
 
Du könntest ein Platzhalter Panel einsetzen, und dieses dann je nach anforderung mit dem gewünschten Panel austauschen.

[Java]

getJContentPane().add(platzhalterPanel,BorderLayout.CENTER);

getJContentPane().remove(index vom Platzhalter);
platzhalterPanel = settingPanel1;
getJContentPane().add(platzhalterPanel,BorderLayout.CENTER);

//und dann repaint() bzw. validate() nicht vergessen.
[/code]

so oder ähnlich habe ich es mal gemacht, mal sehen ob ich den Code noch irgendwo finde...
 
Zuletzt bearbeitet:
Danke für eure Hinweise.

Ich habe mich doch wieder für ein CardLayout entschieden und damit geht es unheimlich einfach.
Ein anderes Problem was ich habe, ist das ich die Frame größe zu Laufzeit ändern möchte.

Kann mir einer sagen wie?

frame.setSize(100,100);

dann ..... code

und irgendwo wenn ein button geklickt wird.

frame.setSize(200,200)
frame.validate().


aber das geht nicht, liegt es wieder an layout-managern?

danke 🙂
 
Folgender Code funktioniert bei mir.

Java:
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		button = new JButton("New button");
		button.addActionListener(this);
		frame.getContentPane().add(button, BorderLayout.NORTH);
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		if (event.getSource() == button) {
			frame.setBounds(100,100,800,600);
			frame.repaint();
		} 		
	}

[Edit:] sehe gerade, das geht wohl auch ohne repaint().
 
Zuletzt bearbeitet:

Zurück
Oben