# GUI, dynamisches Wechseln von JPanels in einem JFrame



## spaghettiBolognese1 (18. Mrz 2007)

Hallo,

bin relativ unerfahren im Programmieren mit GUIs. Und habe gleich meine erste Frage dazu. Ich habe ein JFrame mit einem Borderlayout erzeugt. Dieses JFrame enthält 3 weitere Komponenten. Eine Menüleiste am linken Rand des JFrames (JPanel, diese bleibt die ganze Zeit unverändert. Sie enthält 3 Buttons), ein Button am oberen Rand des JFrames(dieser braucht nicht beachtet zu werden, soll nachher statisch und unverändert bleiben).
Und jetzt kommt das eigentlich interessante, der Hauptteil des JFrames. Dieser soll dynamisch veränderbar sein. Das heisst: Klicke ich auf einen der 3 Buttons in der linken Menüleiste, soll das entsprechende Panel auf dem zentralen Bereich des JFrames erscheinen.

Ich hoffe es ist jedem klar, was ich damit meine. Da es ja manchmal verwirrt, kenne ich selber.


Jetzt folgt mal der Code der Klasse des JFrames

```
package gui;

import java.awt.*;
import javax.swing.*;

public class FrameBase extends JFrame {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public FrameBase() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout(20, 10));
		add(new JButton("oben"), BorderLayout.PAGE_START);    //hier unwichtig
		add(new PanelLeftSidebar(), BorderLayout.LINE_START); //stellt die MenüBar mit den 3 Buttons in den linken  
                                                            //Bereich des JFrames
		add(null); //hier müsste Code ergänzt oder verändert werden, stellt den MainBereich des Frames dar, hier
                 //sollten die Panels geswitcht dargestellt werden können
		setSize(800, 600);
	}
	
}
```

Nun der Code von ein paar Panels die dargestellt werden sollten. Hier müssten wahrscheinlich Listener implementiert werden.

```
package gui;

import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;

public class PanelOrder extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4191198961471906243L;
	public PanelOrder() {
		setLayout(new GridLayout(2, 1));
		add(new JLabel("Order"));
		add(new JList());
	}
	
	
}
```
Ein anderes Panel das dargestellt werden sollte...

```
package gui;

import javax.swing.JButton;
import javax.swing.JTabbedPane;

public class TabbedAuction extends JTabbedPane {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public TabbedAuction() {
		addTab("Auktionsübersicht", new JButton("Hallo1")); 
		addTab("Neue Auktion einstellen", new JButton("Hallo2"));
	}

}
```

Es geht mir in erster Linie um das Verständnis. Wie bewerkstellige ich ein solches dynamisches Wechseln in einem ausgewählten Bereich des Frames?
Ich danke euch jetzt schon für eure Antworten.


----------



## Marco13 (18. Mrz 2007)

Das gibts mehrere Möglichkeiten. In diesem Fall wäre die eleganteste du sinnvollste Möglichkeit wohl ein "Container-Panel", mit einem CardLayout. Zu diesem containerPanel kannst du dann alle austauschbaren Panels hinzufügen, und später auswählen, welches davon gerade angezeigt werden soll. Wie genau das geht, steht dann hier
http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html


----------



## spaghettiBolognese (18. Mrz 2007)

Danke, es hat mit dem CardLayout geklappt. :applaus:


----------

