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.