3.9.7. Mib Layout

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:

Abbildung 14. Mib Layout Demo Applikation

Mib Layout Demo Applikation

Mib Layout Verwendung in jowidgets

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.

Mib Layout Constraints Builder

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.

Mib Layout Platform Defaults

Die Accessor Klasse org.jowidgets.api.layout.miglayout.PlatformDefaults bietet den Zugriff auf die Portierung der Klasse net.miginfocom.layout.PlatformDefaults.

Mib Layout Beispiel

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:

Abbildung 15. Mib Layout Beispiel

Mib Layout Beispiel

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);

Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation