Anhand einiger einfacher Beispiele haben Sie bereits gelernt, wie die Größe oder Position von untergeordneten Widgets basierend auf der Größe des übergeordneten Widgets verändert werden kann. Bislang fand dieser Berechnungstyp als Reaktion auf eine Listener-Funktion für eine Größenänderung statt. Dies ist häufig die beste Methode, um die Anordnung von einfachen Widgets zu handhaben. Es gibt jedoch allgemeine Muster, die von Anwendungen beim Platzieren von Widgets verwendet werden. Diese Muster können in Form von Algorithmen für ein konfigurierbares Layout strukturiert sein, die durch viele unterschiedliche Anwendungen erneut verwendet werden können.
SWT definiert Layouts, die Größe und Position von untergeordneten Widgets in einem Kombinationsobjekt für allgemeine Zwecke definieren. Layouts sind Unterklassen der abstrakten Klasse Layout. Die SWT-Standardlayouts befinden sich im Paket org.eclipse.swt.layout.
Wenn Sie Größe und Position von Widgets ändern wollen, sollten Sie einige allgemeine Definitionen kennen:
Diese Konzepte sind für alle Anwendungen wichtig, und zwar unabhängig davon, ob ein Layout verwendet wird. Ein Layout ist im Grunde genommen eine praktische Methode, um eine Funktionalität für das Ändern der Größe in einem Paket zu definieren und so erneut zu verwenden.
Durch Layouts werden einige weitere Konzepte eingeführt:
Weitere Erläuterungen zu diesen Konzepten sowie entsprechende Abbildungen zu deren Veranschaulichung finden Sie unterUnderstanding layouts in SWT.
Das folgende Code-Snippet zeigt den einfachen Fall einer Anwendung, die einen Rückruf für die Größenänderung verwendet, um eine Bezeichnung auf die Größe ihrer übergeordneten Shell zu setzen:
Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); shell.addControlListener(new ControlAdapter() { public void controlResized(ControlEvent e) { label.setBounds (shell.getClientArea ()); } });
Das nächste Snippet verwendet ein Layout, um denselben Effekt zu erzielen:
Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); shell.setLayout(new FillLayout());
Selbst bei einem so einfachen Beispiel kann der Anwendungscode durch die Verwendung eines Layouts reduziert werden. Bei komplexeren Layouts ist der Vereinfachungseffekt viel größer.
SWT bietet vier Standardlayoutklassen, die in vielen Situationen eingesetzt werden können.