3.9. Layouting

Um die Controls eines Containers anzuordnen benötigt man einen Layouter. Man kann entweder vorgefertigte Layouter verwenden, oder selbst einen Custom Layouter implementieren.

Anfangs unterstütze jowidgets ausschließlich Mig Layout als Layout Mechanismus. Dieses musste von einer SPI Implementierung unterstützt werden [9]. Für die Definition des Layouts wird dabei die Klasse MigLayoutDescriptor verwendet, welche das Tagging Interface ILayoutDescriptor implementiert.

Später wurde im Rahmen einer Bacheloarbeit jowidgets um die Möglichkeit erweitert, eigene Layouter zu erstellen. Dabei wurde die Schnittstelle ILayouter eingeführt, welche ebenfalls von ILayoutDescriptor abgeleitet ist. Zudem wurde Mig Layout für diese Schnittstelle portiert, so dass eine SPI Implementierung nicht mehr zwingend eine Mig Layout Implementierung anbieten muss. Außerdem wurden weitere vorgefertigte Layouter hinzugefügt.

Zur besseren Unterscheidung wird das portierte Mig Layout im folgenden als Mib Layout[10] bezeichnet. Im Gegensatz dazu wird Mig Layout als Natives Mig Layout bezeichnet, wenn betont werden soll, dass es sich nicht um Mib Layout handelt.

Um ein Layout auf einem Container zu setzen, bietet dieser die folgenden Methoden an:

    void setLayout(ILayoutDescriptor layoutDescriptor);

    <LAYOUT_TYPE extends ILayouter> LAYOUT_TYPE setLayout(
        ILayoutFactory<LAYOUT_TYPE> layoutFactory);

Mit Hilfe der ersten Methode wird entweder ein ILayouter oder der native MigLayoutDescriptor gesetzt.

Die zweite Methode bietet die Möglichkeit, einen Layouter mit Hilfe einer ILayoutFactory zu setzen. Der Layouter wird dabei erzeugt und zurückgegeben. Die Layout Factory sieht wie folgt aus:

  1  public interface ILayoutFactory<LAYOUTER_TYPE extends ILayouter> {
  2  
  3      LAYOUTER_TYPE create(IContainer container);
  4  
  5  }

Layout Factories lassen sich für verschiedene Container wiederverwenden. Die vordefinierten Layouts von Jowidgets (mit Ausnahme des nativen Mig Layout) bieten eine Implementierung der ILayoutFactory Schnittstelle.



[9] Was nicht problematisch war, da MigLayout Implementierungen bereits für Swing und Swt existierten.

[10] In Anlehnung an den Entwickler, der die Portierung durchgeführt hat.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation