Planet Metax - Chaos & Logik
Java Swing: Layout-Manager für HTML-ähnliches Blocklayout
03. Mai 2010 Java Swing: Layout-Manager für HTML-ähnliches Blocklayout
Ich habe kürzlich für ein bestimmtes Projekt eine GUI (= graphische Benutzeroberfläche) mit den Java Swing-Klassen programmiert.
Dabei ist mir negativ aufgefallen, dass es scheinbar keine einfache Möglichkeit gibt, Elemente vernünftig untereinander anzuordnen.
Es gibt zwar massig Layout-Manager für sehr einfache oder sehr komplizierte Layouts (z.B: Elemente oben, unten, links, rechts und mittig ausrichten mit BorderLayout oder beliebig komplizierte Tabellenlayouts mit GridBagLayout).
Aber ein ganz simple Anordnung von Elementen untereinander mit jeweils wahlweise Zentrierung, linker oder rechter Ausrichtung oder Streckung über die volle Breite konnte ich irgendwie nicht so einfach erreichen.
Daher habe ich mich entschieden, einen eigenen LayoutManager zu schreiben, der diesen Aufgaben gerecht wird.
Ich kenne dieses Layout-Modell aus HTML/CSS bei Elementen, die die CSS-Eigenschaft display: block besitzen.
Hierbei werden alle Elemente untereinander angeordnet, wobei die Höhe jedes Elementes vom Element selbst bestimmt wird (über getPreferredSize()), wogegen wie Breite normalerweise auf die volle Breite des Containers gestreckt wird.
Der Container ist außerdem mindestens so breit, wie die minimale Breite des breitesten Elements, so dass alle Elemente korrekt angezeigt werden können (es empfiehlt sich, dieses Layout in Kombination mit einer JScrollPane zu benutzen)
Für einzelne Elemente sind außerdem noch die vertikalen Ausrichtungen Zentriert, Linksbündig und Rechtsbündig möglich.
Zuletzt lassen sich auch noch die Abstände zwischen den Elementen und zum Rand ("margin") frei einstellen.
Durch diesen Aufbau ist es leicht möglich, eine listenähnliche Struktur mit heterogenen Elementen (z.B: für einen Report mit Controls, Textblöcken und Bildern) zu erstellen.
Dieser LayoutManager ist kompatibel mit allen Java-Versionen seit Java 1.4 (daher: keine generics!)
Diese Java-Klasse steht unter der Open-Source Lizenz GNU Lesser General Public License und kann frei verwendet werden.
Zur Anschauung ist noch eine Demo-Klasse vorhanden.
Über Feedback würde ich mich freuen!
BlockLayout.java
Java Quell-DateiGröße: 10.7 Kilobyte |
BlockLayoutTest.ja va
Java Quell-DateiGröße: 3.6 Kilobyte |
LGPLv3.txt
TextdateiGröße: 7.6 Kilobyte |
27.07.2010 15:37 Dirk Simon
Hallo Christian,
ich finde Deine Idee Klasse und habe schon oftmals selbst darüber nachgedacht etwas vergleichbares zu schreiben.
ABER:
Bitte stelle doch noch den Definitions-Kontainer (de.planet_metax.blocklayout.BlockLayout.BlockLayoutConstraints) zur Verfügung, danach werde ich Deinen LM auf jeden Fall ausprobieren.
beste Grüße
Dirk
27.07.2010 17:46 Christian
Hallo Dirk,
die Klasse BlockLayoutConstraints ist eine innere Klasse in der Klasse Blocklayout. Der Quelltext dafür befindet sich ebenfalls in der Datei BlockLayout.java.
Wie du die Constrains-Klasse importieren und verwenden kannst, sieht du z.B. in der Datei BlockLayoutTest.java.
Ich hoffe, damit habe ich dir weitergeholfen.
Viele Grüße,
Christian
28.07.2010 09:08 Dirk Simon
Ach, verdammt .. stimmt ! mein Eclipse hats nicht als innere dargestellt ...
vielen Dank u8nd beste Grüße
Dirk
Kommentar schreiben: