Im Rahmen einer Bacheloarbeit
wurde Mig Layout
(http://www.miglayout.com/) für jowidgets portiert. Die
Portierung implementiert die ILayouter
Schnittstelle. Es wurden die meisten Funktionen portiert. Zudem
wurde auch die original MigLayout Demo Applikation auf Basis der
Portierung umgesetzt, der Source Code findet sich
hier.
Die folgende Abbildung zeigt die Demo Applikation:
Um Mib Layout in jowidgets zu verwenden, wird empfohlen, vorab den Mig Layout Quick Start Guide zu studieren.
Die Accessor Klasse
org.jowidgets.api.layout.miglayout.MigLayout
liefert einen Zugriff auf das Mib Layout. Sie hat folgende
Methoden:
public static ILayoutFactory<IMigLayout> get(){...} public static ILayoutFactory<IMigLayout> create( final String layoutConstraints) {...} public static ILayoutFactory<IMigLayout> create( final String columnConstraints, final String rowConstraints) {...} public static ILayoutFactory<IMigLayout> create( final String layoutConstraints, final String columnConstraints, final String rowConstraints) {...} public static ILayoutFactory<IMigLayout> create( final MigLayoutDescriptor descriptor) {...} public static IMigLayoutFactoryBuilder builder() {...}
Ein IMigLayoutFactoryBuilder
hat die
folgenden Methoden:
IMigLayoutFactoryBuilder descriptor(MigLayoutDescriptor descriptor); IMigLayoutFactoryBuilder columnConstraints(String constraints); IMigLayoutFactoryBuilder constraints(String constraints); IMigLayoutFactoryBuilder rowConstraints(IAC constraints); IMigLayoutFactoryBuilder columnConstraints(IAC constraints); IMigLayoutFactoryBuilder constraints(ILC constraints); ILayoutFactory<IMigLayout> build();
Constraints können wie im original Mig Layout mit Hilfe von
Strings oder durch Builder (siehe
Mib Layout
Constraints Builder) erzeugt werden. Die Methode
build()
liefert eine neue
ILayoutFactory<IMigLayout>
zurück.
Die Schnittstelle IMiglayout
hat die
folgenden Methoden:
void setLayoutConstraints(Object constraints); Object getLayoutConstraints(); void setColumnConstraints(Object constraints); Object getColumnConstraints(); void setRowConstraints(Object constraints); Object getRowConstraints(); void setConstraintMap(Map<IControl, Object> map); Map<IControl, Object> getConstraintMap(); boolean isManagingComponent(IControl control);
Die Methoden sind identisch zur Klasse
net.miginfocom.swt.MigLayout
.
Die Accessor Klasse org.jowidgets.api.layout.miglayout.LC kann
für die Builder basierte Erzeugung von
LayoutConstraints
verwendet werden. Sie hat
die folgende Methode:
public static ILC create() {...}
Die Schnittstelle
org.jowidgets.api.layout.miglayout.ILC
hat
die gleichen Methoden wie die original Mig Layout Klasse
net.miginfocom.layout.LC
.
Die Accessor Klasse org.jowidgets.api.layout.miglayout.AC kann
für die Builder basierte Erzeugung von
AxisConstraints
(also
ColumnConstraints
und
RowConstraints
) verwendet werden. Sie hat
die folgende Methode:
public static IAC create() {...}
Die Schnittstelle
org.jowidgets.api.layout.miglayout.IAC
hat
die gleichen Methoden wie die original Mig Layout Klasse
net.miginfocom.layout.AC
.
Die Accessor Klasse org.jowidgets.api.layout.miglayout.CC kann
für die Builder basierte Erzeugung von
ComponentConstraints
verwendet werden. Sie
hat die folgende Methode:
public static ICC create() {...}
Die Schnittstelle
org.jowidgets.api.layout.miglayout.ICC
hat
die gleichen Methoden wie die original Mig Layout Klasse
net.miginfocom.layout.CC
.
Die Accessor Klasse
org.jowidgets.api.layout.miglayout.PlatformDefaults
bietet den Zugriff auf die Portierung der Klasse
net.miginfocom.layout.PlatformDefaults
.
Im folgenden wurde das Beispiel aus dem Abschnitt Mig Layout (nativ) mit Mib Layout umgesetzt:
1 container.setLayout(MigLayout.create("wrap", "[][grow, 0::]", "[][]")); 2 3 final String textFieldCC = "growx, w 0::"; 4 5 //row 0, column 0 6 container.add(BPF.textLabel("Field 1")); 7 8 //row 0, column 1 9 container.add(BPF.textField(), textFieldCC); 10 11 //row 1 (autowrap has wraped to row 1), column 0 12 container.add(BPF.textLabel("Field 2")); 13 14 //row 1, column 1 15 container.add(BPF.textField(), textFieldCC);
Der einzige Unterschied findet sich in Zeile 1 bei der Definition des Layouts, der Rest ist identisch. Die folgende Abbildung zeigt das Ergebnis:
Im folgenden Beispiel wird das gleiche wie oben mit Hilfe der Constraints Builder umgesetzt:
1 container.setLayout(
2 MigLayout.builder()
3 .constraints(LC.create().wrap())
4 .columnConstraints(AC.create().index(1).grow().size("0::")).build());
5
6 final ICC textFieldCC = CC.create().growX().width("0::");
7
8 //row 0, column 0
9 container.add(BPF.textLabel("Field 1"));
10
11 //row 0, column 1
12 container.add(BPF.textField(), textFieldCC);
13
14 //row 1 (autowrap has wraped to row 1), column 0
15 container.add(BPF.textLabel("Field 2"));
16
17 //row 1, column 1
18 container.add(BPF.textField(), textFieldCC);