レイアウト

多くの場合、サイズ変更イベント・リスナーによって、単純なウィジェットの位置決めの処理を最適に行うことができます。ただし、ウィジェットを配置する場合は、アプリケーションで共通のパターンが使用されます。これらのパターンを構成可能なレイアウト・アルゴリズムとして構造化することにより、多くの異なるアプリケーションで再使用することができます。

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 が提供する標準レイアウトを要約したものです。

レイアウト
目的
FillLayout コントロールを単一行または単一カラムにレイアウトして、同じサイズにそろえます。
FormLayout FormAttachments を使用して子の位置を決め、それぞれの子の上下左右のエッジをオプションで構成することもできます。
GridLayout 行および列ごとに子の位置を決めます。
RowLayout 子を水平行内または垂直列内に配置します。