Java Was ist ein Container?

dragonabllz

Ensign
Registriert
Mai 2011
Beiträge
254
Hallo Leute,

sicher, es gibt im WWW so einiges über Java, aber irgendwie will ich nicht vestehen, was ein Container ist (ich lese mich gerade in GUI und Swing ein in Java). Ich habe in einigen Seiten Erklärungen hierzu gelesen, aber ich versteh das nicht so wirklich. Deshalb dachte ich mir, dass der ein oder andere mit eigenen Worten erklären könnte was die Klasse Container eigentlich ist?

Hier z.B. findet man ein CodeBeipsiel:
http://java-tutorial.org/jpanel.html
Es geht dort um den (Standard)Container JPanel.
Ich frage mich, weshalb man umständlich ein JPanel erzeugen muss, um den Hintergrund auf Rot zu setzen, wo doch "meinJDialog" auch eine Methode "setBackground" hat !!!???
 
Ich habe nicht so wirklich Ahnung von Java, aber ich nehme mal an, dass "meinJDialog" das Main-Window ist (da Titel des Fensters damit geändert wurde). Panels gibt es ja eigentlich überall was eine GUI hat.
Ich kenne Panels so, dass du diese an den Ecken andocken kannst. Diese können sich auch dehnen und zusammenziehen, jenachdem wie groß das Fenster ist. Demnach verschieben sich auch die Komponenten innerhalb des Panels.
Mach mal 2 Panels:
Panel 1: Dockt oben,unten & links an
Panel 2: Dockt oben,unten & rechts an
gib den Panels 2 verschiedene Hintergrundfarben und führe es aus, dann sollte es "klick" machen. :)

Edit:
In dem Beispiel macht es nicht wirklich Sinn ein JPanel zu benutzen, wenn man wirklich nur die Hintergrundfarbe ändern möchte. Das kann man ja bestimmt auch über den Objektinspektor machen. Wenn du allerdings eine etwas komplexere GUI machen möchtest, ist die Verwendung von Panels sehr hilfreich, eigentlich schon Pflicht, da man die einzelnen Komponenten besser... ich sag mal verwalten kann - mir fällt was passendes grad nicht ein, ist schon spät ;)
 
Zuletzt bearbeitet:
Ein Container erlaubt dir, darin GUI-Elemente zu platzieren, damit sie angezeigt werden können. Er ist quasi das Rechteck, dass dein Fenster darstellt. Durch Verwendung mehrerer Container kann du bei jedem ein anderes Verhalten vorgeben, was viel Flexibilität ermöglicht.

Nehmen wir mal als analoges Beispiel den Windows Explorer. Links hast du einen Container mit einem TreeControl mit fester Breite und maximaler Höhe, das man ausblenden kann (geht das noch?). Egal wie man das Fenster verzieht, die Breite bleibt immer gleich. Rechts hast du allerdings einen anderen Container mit variablen Abmaßen, der je nachdem mal mehr oder weniger Kind-Elemente anzeigt. Die GUI besteht also, grob gesagt, aus zwei "Ebenen" mit unterschiedlichem Verhalten. Genau dafür sind Container da.
 
Die Javadoc-Beschreibung von java.awt.Container erklärt es doch sehr schön und bietet Verweise auf weitere Dokumentation. Ein Container ist ein Element, das weitere Elemente enthalten kann und deren Darstellung (Anordnung, Verhalten bei Größenveränderungen etc.) bestimmt (mittels Layout-Manager).

Durch Verschachtelung hat man früher komplizierte Layouts aufgebaut. Heute empfiehlt sich eher der Einsatz eines leistungsfähigen Layout-Managers wie MigLayout, wodurch man im Idealfall nur einen Container benötigt, der alle anderen Elemente enthält.

Im angesprochenen Beispiel nimmt man das JPanel nicht, weil nur so die Hintergrundfarbe zu ändern ist, sondern man ändert die Hindergrundfarbe, um das Panel sichtbar zu machen: es füllt den kompletten Inhalt des Fensters aus.
 
Danke, ich verstehe so langsam. Hätte da aber noch eine Frage: Was ist der Unterschied zw. (J)Panel und ContentPane ?
 
Das JPanel ist für den Programmierer da, um es nach Gutdünken für seine Zwecke einzuspannen und anzupassen. Das ContentPane ist zwar auch ein Container, aber es ist der Container, den das Fenster bereitstellt und in den du dein(e) JPanel(s) reinsetzen sollst.

Die Panes sind spezielle Container, bzw. Klassen, die bestimmte Funktionalitäten der GUI realisieren. zB gibt es noch ein JLayeredPane, in dem das ContentPane und die JMenuBar liegt. Die JMenuBar liegt nicht in den JPanels! Weiterhin gibt es noch ein GlassPane, das Mausbewegungen und -aktion überwacht usw. Die Java API schlüsselt ganz genau auf, wie das Ganze funktioniert und wozu das gut ist. Du musst da nur mal reinschauen.
 
Zuletzt bearbeitet:
Zurück
Oben