Mig Layout ist ein freier, von Mikael Grev, Inhaber der Firma MiG InfoCom AB, entwickelter Layout Manager (http://www.miglayout.com/), der unter BSD Lizenz steht. Es existieren Implementierungen für Swing, Swt und Java FX 2. Der Layout Manager hat einen sehr flexiblen Grid basierten Layout Ansatz und eignet sich für sehr viele Anwendungsfälle. Insbesondere ist damit die Erstellung von formularbasierten Masken sehr intuitiv und einfach umzusetzen.
Um Mig Layout mit jowidgets zu verwenden, wird empfohlen, vorab den Mig Layout Quick Start Guide zu studieren.
Die Klasse
org.jowidgets.common.widgets.layout.MigLayoutDescriptor
bietet die Möglichkeit, die
LayoutConstraints
,
RowConstraints
und
ColumnConstraints
für das Layout festzulegen.
Die Constraints haben die gleiche Bedeutung wie in den Klassen
net.miginfocom.swt.MigLayout
oder
net.miginfocom.swing.MigLayout
.
Im folgenden Beispiel wird ein MigLayout definiert.
1 container.setLayout(new MigLayoutDescriptor("wrap", "[][grow, 0::]", "[][]"));
Das Layout hat zwei Spalten und zwei Zeilen, wobei die zweite
Spalte wächst und eine MinSize
von
0
hat. Die
LayoutConstraints="wrap"
bedeuten,
dass automatisch eine neue Zeile begonnen wird, wenn die
aktuelle Zeile voll ist (in diesem Fall also nach zwei
Controls).
Die Cell Constraints werden im folgenden Beispiel beim Hinzufügen der Controls zum Container gesetzt:
1 final String textFieldCC = "growx, w 0::"; 2 3 //row 0, column 0 4 container.add(BPF.textLabel("Field 1")); 5 6 //row 0, column 1 7 container.add(BPF.textField(), textFieldCC); 8 9 //row 1 (autowrap has wraped to row 1), column 0 10 container.add(BPF.textLabel("Field 2")); 11 12 //row 1, column 1 13 container.add(BPF.textField(), textFieldCC);
Die Textfelder wachsen horizontal und haben eine
MinSize
von 0
.
Die folgende Abbildung zeigt das Ergebnis:
Hinweise:
Da native Swt Controls keine MinSize
haben, verwendet die Swt Mig Layout Implementierung als
MinSize
die
PreferredSize
. Das kann unter Umständen
zu Problemen führen. Es wird daher empfohlen, die
MinSize
immer explizit anzugeben, wenn
diese von der PreferredSize
abweicht.
Wenn eine SPI Implementierung kein natives Mig Layout
unterstützt, wird bei der Verwendung des nativen
MigLayoutDescriptor
automatisch
Mib Layout verwendet.
Wenn Mib Layout verwendet wird, wird kein natives Mig Layout verwendet, auch wenn die verwendete SPI Implementierung ein natives Mig Layout bereitstellt.
Die auf einem Control gesetzten Default Größen
MinSize
, PreferredSize
und MaxSize
werden vom nativen MigLayout
nicht ausgewertet. Es
wird daher empfohlen, die Methoden zum Ändern der Default
Größen auf Controls nicht in Kombination mit MigLayout zu
verwenden, um eine größt mögliche Kompatibilität zu
gewährleisten!