# JPanel in Frame austauschen



## BeSp (11. Apr 2007)

Hallo, ich habe hier ein kleines Problem und bin schon fast am Verzeifeln..
Dabei handelt es sich um folgends:
Ich möchte ein in einem Frame untergebrachtes Panel einfach durch ein anderes ersetzen. 
Habe hier mal ien Beispiel gebastelt. Die beiden Panels sind eigene Klassen (von JPanel geerbt)


```
package gui;

import gui.option.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class TheGUI extends JFrame {

	private static final long serialVersionUID = 1L;
	private JButton quit = new JButton("Quit");
	private JButton change = new JButton("Change");
	private JPanel midPanel;

	public TheGUI()
	{
		this.setSize(200, 200);
		this.setLayout(new BorderLayout());
		
		this.add(change, BorderLayout.NORTH);
		this.add(quit, BorderLayout.SOUTH);
		
		// add panel
		midPanel = new Panel_X();
		this.add(midPanel, BorderLayout.CENTER);
		
		// action listener
		change.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				changeButtonActionPerformed(arg0);
			}
		});
		
		this.setVisible(true);
	}
	
	private void changeButtonActionPerformed(ActionEvent ae)
	{
		midPanel = new Panel_Y();
		this.validate();
	}
	
	public static void main(String[] args) 
	{
		@SuppressWarnings("unused")
		JFrame gui = new TheGUI();
	}

}
```

Durch das Drücken auf "Change" soll das Panel in der Mitte des Frames (zu Anfang von der Klasse "Panel_X") durch ein Panel der klasse "Panel_Y" ersetzt werden. Doch wenn man drückt, so ändert sich nichts...

Hier noch die Definition von Panel_X; Panel_Y ist identisch, bis auf einen anderen Button...

```
package gui.option;

import javax.swing.*;

public class Panel_X extends JPanel 
{
	private JButton button1 = new JButton("Hallo");

	public Panel_X() {
		super();		
		this.add(button1);
	}
	
}
```


```
package gui.option;

import javax.swing.*;

public class Panel_Y extends JPanel 
{
	private JButton button1 = new JButton("Guten Morgen");

	public Panel_Y() {
		super();
		this.add(button1);
	}
	
}
```

Was habe ich denn da nicht beachtet und verkehrt gemacht?
Weiß jemand Rat?

Mit freundlichem Gruß
BeSp


----------



## Wildcard (11. Apr 2007)

```
midPanel = new Panel_Y();
      this.validate();
```
Die Variable zu ändern ist sinnlos. Du musst mit remove das alte Panel entfernen und mit add das neue hinzufügen.
Alternativ dazu: CardLayout


----------



## Gast (11. Apr 2007)

oder du addest einfach alle und setzt dann das was du sehen willst mit setVisible auf sichtbar und das andere auf unsichtbar


----------



## Wildcard (11. Apr 2007)

Gast hat gesagt.:
			
		

> oder du addest einfach alle und setzt dann das was du sehen willst mit setVisible auf sichtbar und das andere auf unsichtbar


Schonmal versucht mehrere Komponenten auf BorderLayout.CENTER zu setzen?  :wink:


----------



## BeSp (11. Apr 2007)

Boah Wahnsinn, und das so schnell ... und es funktioniert!
Danke  :toll:  :toll:  :toll: 

 :applaus:


----------

