SWT(JFace)体験のGridLayoutレイアウト


GridLayoutレイアウトはGridLayoutレイアウトの機能が非常に強く、筆者がよく使うレイアウトです。GridLayoutは、親のコンポーネントを一つのテーブルに分け、デフォルトでは各サブコンポーネントが一つのセルの空間を占め、各サブコンポーネントは親のコンポーネントに加えられた順にテーブルに並べられています。GridLayoutは多くの属性を提供しており、グリッドの情報を柔軟に設定することができます。また、GridLayoutレイアウトはGridDataクラスを提供し、サブコンポーネントは対応するGridDataを設定することができ、例えば「dogPhotoo.set LayoutData」、GridDataは各コンポーネントをセルとしての情報を設定することができる。GridLayoutのスタイルGridLayoutクラスは、Gride Layoutレイアウトでグリッドを分割する情報を提供しています。主に以下のいくつかのパラメータで設定します。NumColumns:「gridLayout.numColumns」属性によって、親コンポーネントの中のいくつかの列に分けてサブコンポーネントを表示するように設定できます。MakeColumnsEqualWidth:「gridouyout.make ColumnsEqualWidth」属性により、親コンポーネントの中性子コンポーネントが同じ列幅を持つかどうかを設定できます。Make ColumnsEqualwidthがtrueであるとき、列の列幅が等しくなることを表します。MargingLeft:現在のコンポーネントが親コンポーネントの左から離れているピクセルの数を表します。MargingRight:現在のコンポーネントが親コンポーネントの右側から離れているピクセルの個数を表します。Margin Top:現在のコンポーネントが親コンポーネントから上の距離にあるピクセルの個数を表します。Margin Bottom:現在のコンポーネントが親コンポーネントの下のマージンからのピクセル数を表します。HorizontalSpacing:サブアセンブリの水平間隔を表します。Verical Spacing:サブアセンブリの垂直間隔を表します。GridDataの関連属性GridLayoutレイアウトの柔軟性は、グリッドレイアウトデータGridDataを利用することにある。GridDataにより、メッシュにおけるサブアセンブリの充填方法、サイズエッジなどの情報を設定することができ、ユーザは、サブアセンブリのsetLayoutData方法によりメッシュレイアウトデータを設定することができる。GridDataは、サブアセンブリのグリッド内の位置サイズなどの関連表示情報を制御することができる。GridDataは以下のような属性を設定できます。HorizontalAlignment:水平配置を表します。Verstical Alignment:サブアセンブリの垂直配置を表し、値は水平方式と同じです。HorizontalIndent:サブアセンブリが水平に何ピクセルオフセットされるかを示します。この属性は「HorizontalAlignment=GridData.BEGINNING」属性と一緒に使用されます。HorizontalSpan:コンポーネントがいくつかのグリッドを水平に占めることを示します。GrabExcessHorizontalSpace:親のコンポーネントの大きさが変わると、サブアセンブリが水平方向に空間を奪われるかどうかを示します。GrabExcessVetical Space:親のコンポーネントの大きさが変わった時、サブアセンブリが垂直方向に空間を占有しているかどうかを示します。WidthHit:サブアセンブリの幅がどのぐらいのピクセルかを表します。Heightthint:サブアセンブリの高さは何ピクセルですか?また、GridDataは構造関数によって対応する属性値を指定でき、興味のある読者はGridData類の構造関数を参照することができる。テストコード:GridLayoutSample.java

package swt_jface.demo2;
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.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
public class GridLayoutSample {

Display display = new Display();
Shell shell = new Shell(display);
public GridLayoutSample() {

GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.makeColumnsEqualWidth = true;
shell.setLayout(gridLayout);
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("button1");
button1.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));

List list = new List(shell, SWT.BORDER);
list.add("item 1");
list.add("item 2");
list.add("item 3");
list.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));

Button button2 = new Button(shell, SWT.PUSH);
button2.setText("button #2");
GridData gridData = new GridData(GridData.VERTICAL_ALIGN_END);
gridData.horizontalIndent = 5;
button2.setLayoutData(gridData);

Button button3 = new Button(shell, SWT.PUSH);
button3.setText("3");
button3.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL));

shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) {
new GridLayoutSample();
}
}
GridLayout SampleGrabaSpace.java

package swt_jface.demo2;
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.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class GridLayoutSampleGrabSpace {
public GridLayoutSampleGrabSpace() {

Display display = new Display();
Shell shell = new Shell(display);

GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
shell.setLayout(gridLayout);

Label label = new Label(shell, SWT.BORDER);
label.setText("label");

GridData gridData3 = new GridData();
gridData3.widthHint = 60;
gridData3.heightHint = 20;

label.setLayoutData(gridData3);

Text text = new Text(shell, SWT.SINGLE | SWT.BORDER);
text.setText("text");

GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
gridData.verticalAlignment = GridData.FILL;
text.setLayoutData(gridData);

Button button = new Button(shell, SWT.PUSH);
button.setText("button");

GridData gridData2 = new GridData();
gridData2.grabExcessVerticalSpace = true;
gridData2.grabExcessHorizontalSpace = true;
gridData2.verticalAlignment = GridData.FILL;
gridData2.horizontalAlignment = GridData.FILL;

button.setLayoutData(gridData2);

shell.setSize(300, 80);
//shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) {
new GridLayoutSampleGrabSpace();
}
}
GridLayout SampleSpan.java

package swt_jface.demo2;
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.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
public class GridLayoutSampleSpan {

Display display = new Display();
Shell shell = new Shell(display);
public GridLayoutSampleSpan() {

GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
gridLayout.makeColumnsEqualWidth = true;
shell.setLayout(gridLayout);
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("button1");
button1.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));

List list = new List(shell, SWT.BORDER);
list.add("item 1");
list.add("item 2");
list.add("item 3");
list.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_CENTER));

Button button2 = new Button(shell, SWT.PUSH);
button2.setText("button #2");
GridData gridData = new GridData(GridData.VERTICAL_ALIGN_END);
gridData.horizontalSpan = 2;
gridData.horizontalAlignment = GridData.FILL;
button2.setLayoutData(gridData);

Button button3 = new Button(shell, SWT.PUSH);
button3.setText("3");
GridData gridData2 = new GridData(GridData.VERTICAL_ALIGN_END);
gridData2.verticalSpan = 3;
button3.setLayoutData(gridData2);

shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(String[] args) {
new GridLayoutSampleSpan();
}
}
以下のこの例のレイアウトは少し複雑です。
GridLayoutレイアウトの機能は非常に強く、筆者がよく使うレイアウトです。GridLayoutは、親のコンポーネントを一つのテーブルに分け、デフォルトでは各サブコンポーネントが一つのセルの空間を占め、各サブコンポーネントは親のコンポーネントに加えられた順にテーブルに並べられています。
GridLayoutは多くの属性を提供しており、グリッドの情報を柔軟に設定することができます。また、GridLayoutレイアウトはGridDataクラスを提供し、サブコンポーネントは対応するGridDataを設定することができ、例えば「dogPhotoo.set LayoutData」、GridDataは各コンポーネントをセルとしての情報を設定することができる。
14.11.1 GridLayoutのスタイル
GridLayout類は、GridLayoutレイアウトにおけるグリッドの分割情報を提供しており、主に以下のいくつかのパラメータで設定されている。
NumColumns:「gridLayout.numColumns」属性により、親コンポーネントの中にいくつかの列に分けてサブコンポーネントを表示するように設定できます。
表14-4  NumColumns効果
列    数をかぞえる
効果を表示
numColumns=1
 
numColumns=2
 
numColumns=3
 MakeColumnsEqualWidth:「gridouyout.make ColumnsEqualWidth」属性により、親コンポーネントの中性子コンポーネントが同じ列幅を持つかどうかを設定できます。Make ColumnsEqualwidthがtrueであるとき、列の列幅が等しくなることを表します。MargingLeft:現在のコンポーネントが親コンポーネントの左から離れているピクセルの数を表します。MargingRight:現在のコンポーネントが親コンポーネントの右側から離れているピクセルの個数を表します。Margin Top:現在のコンポーネントが親コンポーネントから上の距離にあるピクセルの個数を表します。Margin Bottom:現在のコンポーネントが親コンポーネントの下のマージンからのピクセル数を表します。HorizontalSpacing:サブアセンブリの水平間隔を表します。Verical Spacing:サブアセンブリの垂直間隔を表します。