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