# Update JPanel



## mavinatic (28. Jul 2011)

Hallo Community,

mir ist aufgefallen, dass ich jedes mal wenn ich auf einen Button drücke und dadurch ein JPanel aktualisieren möchte, dass ich dann weiß ich eigentlich nicht so recht wie ich das machen soll, bis jetzt habe ich es so gemacht, dass ich alles lösche und neuzeichne.

Gibts da eine einfachere Lösung für?

Gruß 

George


----------



## Camino (28. Jul 2011)

Kommt drauf an. Was ist denn auf dem Panel drauf, was aktualisiert werden muss?


----------



## mavinatic (28. Jul 2011)

Wenn es zB wenn die Hintergrundfarbe auf einem Button druck geändert werden muss?


----------



## Camino (28. Jul 2011)

Geht das nicht z.B. mit 
	
	
	
	





```
panel.setBackground(Color.YELLOW);
```
?


----------



## Michael... (28. Jul 2011)

mavinatic hat gesagt.:


> Wenn es zB wenn die Hintergrundfarbe auf einem Button druck geändert werden muss?


Dafür muss man nichts updaten oder refreshen, dass passiert bei setBackground() "automatisch".
Daher noch mal die Frage: Was muss an dem Panel aktualisiert werden?

Änderungen am Layout sind unschön, können aber per validate sichtbar gemacht werden.


----------



## Camino (28. Jul 2011)

Evtl. muss für die Hintergrundfarbe aber auch noch 
	
	
	
	





```
setOpaque
```
 gesetzt werden.


----------



## mavinatic (28. Jul 2011)

Hey ich habe jetzt ein direktes Beispiel: Ich habe ein JPanel auf dem sich 2 JPanels befinden mit einem BorderLayout. Jetzt möchte ich den beiden JPanel 2 andere Panels zuorden die ich in einer anderen Klasse erstellt habe. Und zwar immer wenn ich auf einen Button Drucken


----------



## Michael... (28. Jul 2011)

Wird zur Laufzeit eine Änderung am Layout einer Komponente vorgenommen, muss dieses neu berechnet werden. Ruf mal validate() an der betroffenen Komponente auf.


----------



## Camino (29. Jul 2011)

mavinatic hat gesagt.:


> Hey ich habe jetzt ein direktes Beispiel: Ich habe ein JPanel auf dem sich 2 JPanels befinden mit einem BorderLayout. Jetzt möchte ich den beiden JPanel 2 andere Panels zuorden die ich in einer anderen Klasse erstellt habe. Und zwar *immer* wenn ich auf einen Button Drucken


Was bedeutet dieses *immer*? Wie oft möchtest du die Panel wechseln? Und was sich bei den Panel ändert, ist mir auch noch nicht klar. Ist es weiterhin nur die Hintergrundfarbe? Sollen andere Daten angezeigt werden? Sind es komplett andere Panels, die dann angezeigt werden sollen?


----------



## mavinatic (29. Jul 2011)

Es sollen komplett andere Panels mit anderen Componenten angezeigt werden. Und diese anderen Componenten sollen alle aktualisiert werden.


----------



## Camino (29. Jul 2011)

Du hast aber - auch nach mehrmaligem Nachfragen - immer noch nicht beantwortet, welche Komponenten auf den Panel denn aktualisiert werden sollen (ausser die Hintergrundfarbe). Was bedeutet denn aktualisieren? Anderer Text auf Label oder Button? Formulardaten in Textfeldern? Irgendwelche grafische Änderungen an Komponenten? Und wie oft sollen die Panel aktualisiert werden? Nur einmal oder soll mehrmals zwischen Panel hin- und hergeschaltet werden? Solange du nicht konkreter wirst, wird es nicht einfacher, dir zu helfen.
Wenn du nämlich nur den 2 Panels andere Panels zuweisen möchtest, könntest du das auch mit einem CardLayout machen, also alle Panel schon vorher erstellen und dem Layout hinzufügen und dann festlegen, welche Panel angezeigt werden.


----------



## mavinatic (29. Jul 2011)

Auf den Beiden Panel werden Daten in JTextFields aktualisiert


----------



## Camino (29. Jul 2011)

Ja siehste, da haben wir es nämlich schon. Die Infos sind zwar immer noch sehr dürftig, aber schon ein bisschen klarer, als wie zu Beginn. Du hast also in den Panels formularähnliche Komponenten, bei denen sich die Daten aktualisieren, und nicht die grafischen Komponenten. Du könntest also mit einer View (Panel) und einem Model (Daten) arbeiten. Die Daten im Panel aktualisieren sich dann z.B. über Observer. Wenn die Panel also gleich bleiben, nur sich die Daten in den Textfeldern ändern bzw. aktualisiert werden müssen, dann brauchst du auch nicht 2 Panel, die sich austauschen, sondern nur 1, in welchem die Daten (über das Model) aktualisiert werden.


----------

