<更新記録>
2007年 12月 11日
作成

姉妹サイト検索 Web検索


GridLayout

GridLayout

GridLayoutクラスは、最も便利でよく使われるレイアウトです。 GridLayoutクラスは、列数を決めて、Controlの数がその列数に達したら、その次のConrolは、 折り返して表示します

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;

public class GridLayoutComposite extends Composite {
	public GridLayoutComposite(Composite parent) {
		super(parent, SWT.NONE);
		
		GridLayout layout = new GridLayout(4, false);
		setLayout(layout);
		
		for (int i=0 ; i<10 ; i++) {
			Button button = new Button(this, SWT.NONE);
			button.setText("button " + i);
		}
	}
}

GridData

GridLayoutクラスで指定できるオプションは、列数だけでした。 さらに詳細なレイアウトを設定するには、GridDataクラスを使用します。

GridDataの設定は、コンストラクタで指定するものと、パラメータ値に直接設定するものの2種類が存在します。 まずはコンストラクタで指定するものから見ていきます。

FILL_BOTH       // 縦と横を満たす
FILL_HORIZONTAL // 横を満たす
FILL_VERTICAL   // 縦を満たす
FILL_???スタイルを指定して作成されたレイアウトデータをセットされたコントロールは、コンポジットのサイズが変わったときに、 あまった余白をそのコントロールで満たすようになります。 FILL_HORIZONTALが設定されていたら横幅が広がったときに横に伸び、 FILL_VERTICALが設定されていたら縦幅が広がったときに縦に伸びます。 FILL_BOTHの場合は、縦にも横にも伸びます。 実行例では、button 4に、FILL_BOTHが設定してあります。

HORIZONTAL_ALIGN_BEGINNING  // 左寄り
HORIZONTAL_ALIGN_CENTER     // 左右の中央
HORIZONTAL_ALIGN_END        // 右寄り
HORIZONTAL_ALIGN_BEGINが指定されると左寄りに、 HORIZONTAL_ALIGN_CENTERが指定されると中央に、 HORIZONTAL_ALIGN_ENDが指定されると右寄りに表示されます。 これはあくまでも、コントロールが表示される範囲内での話しであって、 表示順が入れ替わるわけではありません。 実行例では、short 4のボタンに、HORIZONTAL_ALIGN_ENDが設定されています。

VERTICAL_ALIGN_BEGINNING    // 上寄り
VERTICAL_ALIGN_CENTER       // 上下の中央
VERTICAL_ALIGN_END          // 下寄り
そしてワシ                  // 年寄り(ちがーう!)
HORIZONTAL_ALIGN_????の縦ヴァージョンです。

次に、パラメータ値に直接指定するものを見ていきます。

widthHint  // Controlの横幅の下限
heightHint // Controlの縦幅の下限
widthHint、heightHintには、それぞれSWT_DEFAULTを指定することもできます。 この場合は、下限が0になります。 実行例の場合、button 4には、widthHint = 100、heightHint = 50が設定されているので、 他のボタンは小さくパックされているのに、button4だけはその最低幅を保ったまま表示されています。

horizontalIndent  // 左右のコントロール同士のピクセル幅
verticalIndent    // 上下のコントロール同士のピクセル幅

horizontalSpan    // 横何カラムにまたがるか
verticalSpan      // 縦何カラムにまたがるか
一番理解しにくいのが、このhorizontalSpanとverticalSpanだと思います。 普通GridLayoutでは、横方向に4列の場合、4つのコントロールを並べることができます。 この状態は、horizontalSpanが1の状態です(デフォルト)。 しかし、horizontalSpanを4にすると、横にそのコントロールの1つのみしか配置することができません。 つまり4個分の幅をそのコントロール1つが占領してしまうわけです。 verticalSpanについても、縦方向に、同じです。

最後に、horizontalSpan、verticalSpan、それにFILL_BOTHを使ったサンプルプログラムを示します。 GridDataをセットしたbutton 3だけが横幅2、縦幅2をとり、また、伸縮します。

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;

public class GridLayoutComposite extends Composite {
	public GridLayoutComposite(Composite parent) {
		super(parent, SWT.NONE);
		
		GridLayout layout = new GridLayout(3, false);
		setLayout(layout);
		
		GridData data = new GridData(GridData.FILL_BOTH);
		data.horizontalSpan = 2; // 横幅を2つとる
		data.verticalSpan = 2;   // 縦幅を2つとる
		
		for (int i=0 ; i<9 ; i++) {
			Button button = new Button(this, SWT.NONE);
			button.setText("button " + i);
			// button 3だけにLayoutDataを設定
			if (i == 3) {
				button.setLayoutData(data);
			}
		}
	}
}


Powered by VeryEasyCMS