BorderLayout: EAST, CENTER, WEST

r74

Aktives Mitglied
Hallo Forum

Ich habe in einem JApplet ein JDesktopPane mit einem BorderLayout versehen. Zu Beginn fülle ich die Bereiche NORTH, SOUTH, WEST und CENTER mit je einem JPanel. Klappt einwandfrei. Die Applet-Grösse passt sich dynamisch dem Browserfenster an.

Nach Klicken eines gewissen Buttons möchte ich nun, dass sich ein neues JPanel über den "mittleren Balken" also die Bereiche WEST,CENTER (und EAST) erstreckt. Sobald dann im neuen JPanel ein Button gedrückt wird, sollten die alten Bereiche WEST und CENTER wieder zum Vorschein kommen und das neue JPanel wieder verschwinden.

Mein bisher erfolgreichster Versuch:
Ich fülle EAST mit dem neuen JPanel und setze WEST und CENTER auf setVisible(false). Das Wegklicken des neuen JPanels funktioniert. Die WEST und CENTER Komponente lasse ich mit setVisible(true) wieder erscheinen.
Was dabei nicht klappt: Das neue JPanel erstreckt sich n i c h t über die gesamte Breite.

Kann mir jemand weiterhelfen?
 
Ich habe den Code des oben beschriebenen Problems aufs wesentliche reduziert. So kann mir bestimmt jemand weiterhelfen ;-)
Der Wunsch wäre: Nach Klick auf "weiter" sollte der EAST-Bereich die gesamte Fensterbreite einnehmen...

Java:
public class Main extends JApplet {
	
	private JDesktopPane desktop;
	private JButton b;
	private JPanel westPNL , centerPNL;
	
	public void start() {
		desktop = new JDesktopPane();
		desktop.setLayout( new BorderLayout() );
		
		JPanel northPNL = new JPanel();
		b = new JButton( "weiter" );
		b.addActionListener( new bAL() );
		northPNL.add( b );
		desktop.add( northPNL , BorderLayout.NORTH );
		
		westPNL = new Test( "WEST" );
		desktop.add( westPNL , BorderLayout.WEST );
		
		centerPNL = new Test( "CENTER" );
		desktop.add( centerPNL , BorderLayout.CENTER );
		
		this.add( desktop );
	}
	
	class bAL implements ActionListener {
		public void actionPerformed(ActionEvent _e) {
			if( _e.getSource() == b ) {
				JPanel eastPNL = new Test( "EAST" );
				desktop.add( eastPNL , BorderLayout.EAST );
				westPNL.setVisible( false );
				centerPNL.setVisible( false );
				desktop.revalidate();
			}
		}
	}
}


Java:
public class Test extends JPanel {

	public Test( String _s ) {
		this.setBorder( BorderFactory.createEtchedBorder() );
		this.add( new JLabel( _s ) );
	}	
}
 
Zuletzt bearbeitet:
@Michael: Kannte dieses CardLayout nicht. Habe ein bisschen damit rumgespielt. Was aber wenn ich den ursprünglichen NORTH- und SOUTH-Bereich auf der "ersten Karte" und der "zweiten Karte" angezeigt haben will?
 

Zurück
Oben