Literatur

Layout Manager

Zum Einstieg in das Thema Layout Manager möchten wir zunächst kurz den Begriff Layout definieren:

Unter einem Layout (engl. für Entwurf) versteht man das Grundschema für die Darstellung gestalterischer Elemente. Im Bereich der Printmedien kann es sich dabei beispielweise um den Aufbau eines Zeitungsartikels handeln. Ein Layout beinhaltet noch keine Inhalte, sondern nur Darstellungsregeln.

Die Layout Manager in Java bilden das Grundgerüst für die Platzierung der grafischen Elemente auf der Benutzeroberfläche und stellen das Werkzeug (Methoden) zur Verfügung, um die Elemente innerhalb dieses abgesteckten Rahmens zu positionieren. Das geht so weit, dass manche Layoutmanager Ihnen die Platzierung bzw. Skalierung Ihrer Elemente weitgehend oder auch völlig aus der Hand nehmen (wie zum Beispiel Flow- oder Grid-Layoutl). Man muss also eine klare Vorstellung davon haben, worauf man sich einlässt, wenn man sich für einen bestimmten Manager entscheidet, sonst sind unerwartete Ergebnisse die wahrscheinliche Folge.

Theoretisch wäre es möglich, sämtliche Elemente der grafischen Benutzeroberfläche absolut zu positionieren, indem man auf ein Layout komplett verzichtet (in Java spricht man dann von der Anwendung des sog. Null-Layouts). Da Benutzeroberflächen in der Regel möglichst übersichtlich und anwenderfreundlich und nicht zuletzt auch optisch ansprechend sein sollen, würde dies aber einen ungleich höheren Programmieraufwand erfordern als bei der Verwendung eines Layouts, da die Positionen und Abstände vorgegeben oder berechnet werden müssten. Besonders trifft dies auf Oberflächen zu, deren Elemente nicht vorher feststehen, weil sie erst zur Laufzeit dynamisch ermittelt werden.

Hat man schließlich eine Anordnung gefunden, mit der man zufrieden ist, kann man sich nun Gedanken machen, welcher LayoutManager sich am besten eignet, um diese Anordnung darzustellen.

Alle LayoutManager-Klassen implementieren das Interface java.awt.LayoutManager. Im Folgenden möchten wir Ihnen eine Übersicht über die acht Layout-Manager in Java geben:

FlowLayout

FlowLayout Beispiel

FlowLayout ist der das Standardlayout für JPanels. Die Komponenten werden in einer Reihe nebeneinander angeordnet. Wenn eine Komponente nicht mehr in die Reihe passt, bildet diese den Anfang einer neuen Reihe.


BorderLayout

BorderLayout Beispiel

Content Panes von JFrame, JApplet und JDialog verwenden standardmäßig diesen Layout Manager. BorderLayout untergliedert den ContentPane in fünf Bereiche, die sich an den Himmelsrichtungen orientieren (North, East, South, West und Center). Diesen kann jeweils eine GUI-Komponente zugeordnet werden. Wählt man dafür ein JPanel, so kann diesem wieder ein eigener Layoutmanager zugewiesen werden, sodass auch sehr komplexe Hierarchien aufgebaut werden können.


BoxLayout

BoxLayout Beispiel

Dieser Layout Manager platziert die Komponenten in einer horizontalen oder vertikalen Reihe. Im Unterschied zum FlowLayout wird keine neue Zeile bzw. Spalte angefangen, wenn die Komponente nicht mehr reinpasst. Durch Schachtelung von mehreren BoxLayouts kann man auch komplexere Layouts abbilden.


CardLayout

CardLayout Bild1 CardLayout Bild2 CardLayout Bild3

Bei diesem Layout werden die Komponenten wie Karten auf einem Kartenstapel angeordnet. Wie auch bei Registerkarten wird nur eine Komponente angezeigt. Oft  wird eine JComboBox dazu verwendet, um  zwischen den Komponenten zu wechseln. Auch hier kann das eine Element wieder ein JPanel sein, dem seinerseits ein Layout Manager zugeordnet werden kann.


GridLayout

GridLayout Beispiel

Das GridLayout ordnet die Komponenten in einem Gitternetz aus Zellen an. Alle Zellen sind gleich groß und jede Komponente nimmt genau eine Zelle ein. Lediglich der Zeilen- und Spaltenabstand kann angegeben werden.


GridBagLayout

GridBackLayout Beispiel

Dieser Layout Manager ist sehr komplex, aber dafür auch sehr anpassungsfähig, so dass man damit so gut wie jedes Layout abbilden kann. Wie beim GridLayout wird die Oberfläche in ein Raster unterteilt, jedoch können sich Komponenten über mehrere Zellen ausdehnen. Des Weiteren können die Reihen unterschiedliche Breiten und die Zeilen verschiedene Höhen annehmen.


GroupLayout

Dieser Layout Manager ist eigentlich für GUI-Builder entwickelt worden, kann aber auch für die händische Programmierung verwendet werden, wobei sich in den meisten Fällen andere Layout Manager als komfortabler erweisen dürften. Das GroupLayout unterscheidet dabei zwischen einem horizontalen und einem vertikalen Layout. Diese beiden Dimensionen beinhalten jeweils eine Gruppe aus Komponenten bzw. weiteren Gruppen, die entweder sequentiell oder parallel angeordnet sind.

Beide Layouts müssen separat ausgearbeitet werden, was auch bedeutet, dass jede Komponente auf beiden Ebenen angeordnet werden muss, was einen höheren Programmieraufwand gegenüber den anderen Layouts bedeutet. Meistens ist man daher bei komplexeren Layouts mit dem GridBagLayout besser beraten.


SpringLayout

Dieser Layout Manager ist aufgrund seiner hohen Flexibilität für GUI-Builder gedacht. Das Layout wird erstellt, indem Relationen und Abstände zwischen den Rändern der Komponenten angegeben werden. Da dies bei der manuellen Programmierung allerdings wenig komfortabel ist, so dass der Begriff "Manager" kaum noch gerechtfertigt ist, ist von der Verwendung außerhalb von GUI Buildern abzuraten.


Zum Schluss noch ein paar allgemeine Hinweise:

Sinnvoll ist es, wenn man sich erstmal mit den einfachen Layouts, wie z. B. dem FlowLayout, BorderLayout und dem BoxLayout beschäftigt. Es lohnt sich aber, sich auch mit den komplexeren Layouts, wie dem GridBagLayout, auseianderzusetzen. Diese erfordern zwar mehr Einarbeitungszeit und gerade das GridBagLayout erscheint möglicherweise anfangs kompliziert, wenn man dieses jedoch versteht und anzuwenden weiß, hat man eine umso größere Gestaltungsfreiheit. So können auch komplexere dynamische Layouts erstellt werden. Durch den Einsatz von mehreren JPanels ist es zudem möglich, eine Benutzeroberfläche zu gestalten, die sich verschiedener Layouts bedient.

GUI-Builder wie Sie z. B. in Entwicklungsumgebungen wie etwa Netbeans ("matisse") integriert sind, können einem eine große Hilfe bei der Erstellung grafischer Oberflächen sein. Dort kann man in der Regel auch zwischen den verschiedenen oben vorgestellten Layout Managern wählen. Auch wenn man sich vieles einfach zusammenklicken kann, müssen dennoch häufig bestimmte Einstellungen vorgenommen werden, um das Layout an die eigenen Anforderungen anzupassen. Dazu muss man den jeweiligen Layout Manager aber verstanden haben. Wenn man mit den Layout Managern noch nicht vertraut ist, ist es daher ratsam, zu Übungszwecken zunächst auf die Hilfe von GUI-Buildern zu verzichten. Später können diese einem jedoch eine große Hilfe sein.