これまでに、親ウィジェットのサイズに基づいて子ウィジェットのサイズまたは位置を設定する簡単な例について説明しました。 そこでは、このタイプの計算はサイズ変更リスナーに応答して発生しました。 通常は、この方法によって単純なウィジェットの位置決めを最適に行うことができます。 ただし、ウィジェットを配置する場合は、アプリケーションで共通のパターンが使用されます。 これらのパターンを構成可能なレイアウト・アルゴリズムとして構造化することにより、 多くの異なるアプリケーションで再使用することができます。
SWT はレイアウトを定義して、コンポジット内の子ウィジェットの位置決めおよびサイズ変更を汎用的に行います。レイアウトは抽象クラス Layout のサブクラスです。 SWT の標準レイアウトは org.eclipse.swt.layout パッケージ内にあります。
ウィジェットのサイズ変更および位置決めを行う場合、一般的な定義をいくつか理解する必要があります。
これらの概念は、レイアウトを使用するかどうかどうかにかかわらず、アプリケーションに関係します。 レイアウトは、サイズ変更機能を再使用できるようにパッケージする便利な方法と見なすことができます。
レイアウトによって、さらに概念が導入されます。
詳細およびこれらの概念を示すピクチャーについては、『SWT のレイアウトの概要』を参照してください。
次のコードの断片は、ラベルを親シェルと同じサイズにするためにサイズ変更コールバックを使用する アプリケーションの例を示しています。
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 ()); } });
次のコードの断片は、レイアウトを使用して同じ効果を実現します。
Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); shell.setLayout(new FillLayout());
この例だけを見ても、レイアウトによってアプリケーションのコードが削減されることがわかります。 より複雑なレイアウトを使用する場合は、さらにコードが単純化されます。
SWT は、いくつもの状況に使用できる 4 つのデフォルトのレイアウト・クラスを提供します。