-Seminar- Java Layout Manager (JLM) Marc Dziadek Begriffsdefinition Oberfläche Komponente Container für Dialogelemente Registrierung der Layout-Manager Java-Objekte die auf einer Oberfläche registriert werden können Anmerkung Oberflächen können auch Komponenten sein Gründe für Layout Manager Standart: Feste Anordnung der Elemente Java plattformunabhängig Unterschiedliche Betriebssysteme Unterschiedliche Ausgabegeräte Unterschiedliche Elementgröße Verzerrtes Layout Layout-Manager: Java-Pakete java.awt.* Einbinden in Quelltext import java.awt.*; import java.awt.<<Layoutmanager>>; Funktionsweise Mit AWT und Swing nutzbar 1. 2. JLM instanziieren JLM der Oberfläche zuweisen 3. Swing: contentPane Oberflächenmethode setLayout() Optional: Konfiguration des LM Abstände Ausrichtung Etc. Funktionsweise 4. Komponenten bei Oberfläche registrieren add(Component) automatisch bei JLM registriert JLM kümmert sich im Rahmen interner Regeln um die Anordnung i.A. Reihenfolge der Komponentenregistrierung entscheidend (Ausnahmen!) 5. Oberflächengröße minimieren pack() Flow-Layout einfachster Layoutmanager Ordnet die Elemente hintereinander an („Kette“) public FlowLayout(int align, int hgap, int vgap) Grid-Layout Oberfläche wird in Gitter mit Zellen gleicher Größe aufgeteilt Elemente werden auf Zellengröße skaliert geschachtelte Layout-Manager public GridLayout(int rows, int colums, int hgap, int vgap) Grid-Layout Oberfläche wird in Gitter mit Zellen gleicher Größe aufgeteilt Elemente werden auf Zellengröße skaliert geschachtelte Layout-Manager public GridLayout(int rows, int colums, int hgap, int vgap) Border-Layout Oberfläche in 5 Bereiche aufgeteilt (North, West, Center, East, South) Spezifikation des Bereiches add(String name, Component component) Komponentenskalierung bereichsabhängig GridBag-Layout komplexer Layout-Manager detailliert konfigurierbar lange Einarbeitungszeit viel Erfahrung nötig beste Resultate GridBagLayout Gitterraster Unterschiedliche Zellengrößen möglich Komponenten über mehrere Zellen GridBag-Layout 1. 2. 3. Instanz von GridBagLayout erzeugen und bei der Oberfläche registrieren Object GridBagConstraints für jede Komponente erzeugen und über deren Membervariablen konfigurieren Registrieren beim Layout-Manager setConstraints(Component, GridBagConstraints) 4. Komponente bei Oberfläche registrieren add() GridBagConstraints public GridBagConstraints( int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) Tipp! GridBagLayout Menüleiste --------------JButton, 3 Spalten----------------JTextArea, 2 Spalten, 2 Zeilen unbenutzt JButton, SOUTHEAST NULL-Layout Kein Layoutmanager Feste Positionierung der Komponenten 1. 2. 3. setLayout( null ); Erzeugen der Komponente Festlegung Position/Größe setSize(); setLocation(); setBounds(); Registrieren der Komponente Fenstergröße setzen (kein pack()) geschachtelte Layoutmanager JFrame, GridLayout JPanel, BorderLayout JPanel, GridLayout JPanel, GridBagLayout Bewertung Viel Mühe und Zeit Viel Erfahrung nötig Frustration Abhängigkeiten komplexer Layouts Unabdingbar für Plattformunabhängigkeit Ein Muss für Java-Programmierer Quellen GoTo Java 2, 2. Auflage, Guido Krüger, Addison-Wesley Java professionell, Gerhard Wilhelms, Markus Kopp, MITPVerlag http://java.sun.com http://www.java3d.org