【Java】GridLayoutを利用して複雑なレイアウトを作るサンプル。【SWT】
目的
SWTを利用して3つのボタンを以下のようにレイアウトしてみます。
[button0] 高=成行 幅=80 | [button1] 高=50 幅=成行 |
[button2] 高=成行 幅=成行 |
サンプルコード
import org.eclipse.swt.*;
import org.eclipse.swt.custom.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* SWTのGridLayoutを利用するサンプル。
*
*/
public class MyLayout {
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
// 親のレイアウトを2列のグリッドレイアウトに設定
GridLayout gridLayout = new GridLayout ();
gridLayout.numColumns = 2;
shell.setLayout (gridLayout);
//******************************************
* button0
******************************************/
Button button0 = new Button (shell, SWT.PUSH);
button0.setText ("button0");
// レイアウトデータを生成。
GridData data = new GridData ();
// 幅を80に設定。
data.widthHint = 80;
// セルを上下に2行分マージする。
data.verticalSpan = 2;
// 上下に成行で広げる。
data.grabExcessVerticalSpace = true;
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
// レイアウトデータをセット。
button0.setLayoutData (data);
//******************************************
* button1
******************************************/
Button button1 = new Button (shell, SWT.PUSH);
button1.setText ("button1");
// レイアウトデータを生成。
data = new GridData ();
// 高さを50に設定。
data.heightHint = 50;
// 左右に成行で広げる。
data.grabExcessHorizontalSpace = true;
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
// レイアウトデータをセット。
button1.setLayoutData (data);
//******************************************
* button2
******************************************/
Button button2 = new Button (shell, SWT.PUSH);
button2.setText ("button2");
// レイアウトデータを生成。
data = new GridData ();
// 左右に成行で広げる。
data.grabExcessHorizontalSpace = true;
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
// レイアウトデータをセット。
button2.setLayoutData (data);
shell.pack ();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
}
ポイント
各ボタンコンポーネントにおけるレイアウトデータの設定がポイントとなります。
1.GridData#heightHint や GridData#widthHint で高さや幅を設定。
2.GridData#verticalSpan や horizontalSpan でセルをマージ。
3.GridData#grabExcessVerticalSpace や GridData#grabExcessHorizontalSpace で空きスペースを埋める。
4.GridData#horizontalAlignment や GridData#verticalAlignment でAlignmentを調整。