# JFrame mit mehreren Panels



## Amare (22. Feb 2005)

Hallo zusammen!

Ich hab hier einen JFrame, dem ich zwei JPanels mitgeben möchte, um immer nur eines davon visible zu setzen. Das ganze hat in einem Applet schon super funktioniert, aber bei einer normalen GUI klappt das nicht mehr.

-> Wenn ich nur eines der beiden Panels adde, gehts.
-> Sobald ich beide adde seh ich gar keins.


Hat jemand einen Tipp für mich ?



```
BorderLayout thisLayout = new BorderLayout();
				this.getContentPane().setLayout(thisLayout);
				
				configPanel = new Config_Panel();
				parsingPanel = new Parsing_Panel();
				this.getContentPane().add(parsingPanel);
				this.getContentPane().add(configPanel);
				configPanel.setVisible(false);
				parsingPanel.setVisible(true);
```


----------



## Icewind (22. Feb 2005)

wenn du schon ein border layout verwendest könntest du das so machen:

```
this.getContentPane().setLayout(new BorderLayout());
            
configPanel = new Config_Panel();
parsingPanel = new Parsing_Panel();
this.getContentPane().add(parsingPanel,BorderLayout.NORTH);
this.getContentPane().add(configPanel,BorderLayout.SOUTH);
configPanel.setVisible(false);
parsingPanel.setVisible(true);
```

sollte nur eines angezeigt werden...


----------



## dotlens (22. Feb 2005)

bei dem einen schreibst du ja setVisible(false) ;-)
Ausserdem brauchst du nicht alle Panels sichtbar zu schalten. es reicht, wenn du das Frame mit setVisible(true) sichtbar machst...


----------



## Stoudemire (22. Feb 2005)

thx,
anscheinend muss ich eine unterschiedliche Position im BoarderLayout mitgeben damit's funktioniert.

Vielen Dunk !


----------



## #32 (22. Feb 2005)

Weiterführende Frage: 

Wenn ich mehrere Panels im JFrame switchen möchte, gibt es da eine Möglichkeit alle an der gleichen Position (!) zu haben um immer nur eines sichbar zu machen OHNE beim Switchen die Panels jedesmal wieder zu entfernen ?


----------



## dotlens (23. Feb 2005)

schau dir mal das CardLayout  an


----------



## phoenix sun (23. Feb 2005)

Das will ich aber vermeiden.

Und wenn ich dynamisch das aktuelle Panel remove und ein neues dazugebe, funktioniert das auch nicht, das neue wird nicht angezeigt ...


```
this.getContentPane().removeAll();
this.getContentPane().add(configPanel, BorderLayout.CENTER);
```

Muss ich da noch irgendetwas anderes aufrufen ?


----------



## dotlens (23. Feb 2005)

repaint() oder validate()
wenn du die grösse noch anpassen willst pack()


----------



## Stefan1200 (23. Feb 2005)

Anonymous hat gesagt.:
			
		

> Das will ich aber vermeiden.
> 
> Und wenn ich dynamisch das aktuelle Panel remove und ein neues dazugebe, funktioniert das auch nicht, das neue wird nicht angezeigt ...
> 
> ...



Versuche mal:

```
this.getContentPane().removeAll();
this.getContentPane().add(configPanel, BorderLayout.CENTER);
this.validateTree();
```


----------



## phoenix sun (23. Feb 2005)

Nach repaint() war interessanterweise KEIN PANEL zu sehen, nach validateTree() das gewünschte.

SCHOENEN DUNK !


----------



## phoenix sun (23. Feb 2005)

Letzte Korrektur:

this.validateTree();
this.repaint();

ist nötig !


----------

