レイアウトマネージャについて¶
SWTで提供されているレイアウトクラスです。
- FillLayout ウィジェット(Widget)を垂直または水平方向に、一列に同じ大きさに並べるレイアウトです。SWTで提供されているレイアウトの中でもっともシンプルなレイアウトです。
- RowLayout
ウィジェットを垂直または水平方向に複数行に並べて配置するレイアウトです。ウィンドウがリサイズされたときに、収まりきらないウィジェットが次の行に配置されます。
プロパティは、fill、wrap、spacingなどです。 - GridLayout
ウィジェットをグリッド上に配置するレイアウトです。配置したWidgetのmarginや位置合わせなど、細かい設定も可能です。
HTMLのテーブルタグの感覚で配置でき、使いやすいレイアウトといえます。 - FormLayout SWT独自のレイアウトで、WidgetをWindow内部の相対位置や、別のウィジェットとの相対位置で配置を指定できるものです。非常に柔軟性のあるレイアウトです。
- StackLayout Stack式のLayout、もっと上のコントロールのみを表示する
それぞれのレイアウトには対応したレイアウトデータクラスというものがあり、配置するウィジェットにデータクラスをセットすることで、より細かなレイアウトを実現できます。
以下に各レイアウトを表にしてまとめます。
| レイアウト名 | 対応するデータクラス |
|---|---|
| FillLayout | 無し |
| RowLayout | RowData |
| GridLayout | GridData |
| FormLayout | FormData |
FillLayout¶
名前のとおり領域いっぱいにコンポーネントを配置するLayoutです。コンストラクタで水平方向か、垂直方向かを指定できます。
下の例では、GroupオブジェクトにFillLayoutを設定してありますが、Shellオブジェクトにも同じようにレイアウトを設定することができます。
- プロパティ:
- 並び方向:type
1
layout.type=SWT.HORIZONTAL/SWT.VERTICAL;// デフォルト水平方向
- 余白:marginHeight、marginWidth、spacing
1 2 3
layout.marginHeight=10;// 上下余白高さをセット layout.marginWidth=10; // 左右余白幅をセット layout.spacing=5; // コントロールの間隔をセット
RowLayout¶
RowLayoutは水平/垂直方向にコントロールを配置できるレイアウトです。
RowLayoutのtypeフィールドで水平方向か垂直方向の配置を指定でき、各コントロールのサイズをRowDataで設定できる。
- プロパティ:
- 改行表示:wrap
1 | layout.wrap=true/false;// デフォルト:true |
1 | layout.pack=false/true;// デフォルト:true |
1 | layout.type=SWT.VERTICAL/SWT.HORIZONTAL;// デフォルト水平方向 |
1 | layout.justify=true/false;// デフォルト:false |
1 2 3 4 5 | layout.marginLeft=10; layout.marginTop=10; layout.marginRight=10; layout.marginBottom=10; layout.spacing=10; |
1 | setLayoutData(new RowData(int width, int height)); |
1 | layout.fill=true;// デフォルトfalse |
GridLayout¶
GridLayoutは格子状にコンポーネントを配置するレイアウトです。
HTMLのテーブルタグの感覚で配置します。配置する格コンポーネントのレイアウト情報は、GridData経由で設定します。
GridLayoutで注意しなければいけないのは、SWTの仕様上GridDataのインスタンスを再利用してはいけないということです。再利用すると正しくレイアウトが表示されません。
- プロパティ:
- 列数:numColumns
1
layout.numColumns=3;// デフォルト:1列
- 列の幅を同じように:makeColumnsEqualWidth
1
layout.makeColumnsEqualWidth=true;// デフォルト:false
- 余白と間隔:
marginLeft、marginTop、marginRight、marginBottom、horizontalSpacing、verticalSpacing
デフォルト:5px1 2 3 4 5 6
layout.marginLeft=10; // 左余白 layout.marginTop=10; // 上余白 layout.marginRight=10; // 右余白 layout.marginBottom=10; // 下余白 layout.horizontalSpacing=10;// 水平間隔 layout.verticalSpacing=10; // 垂直間隔
- 大きさ:GridData 注:GridDataオブジェクトを重複使えないように
-
Cell Alignment:horizontalAlignment/verticalAlignment
-
水平Align方式(horizontalAlignment)の定数(デフォルト:SWT.BEGINNING)
定数 意味 SWT.BEGINNING /2.左詰め SWT.LEFT SWT.CENTER センタリング SWT.END /2.右詰め SWT.RIGHT SWT.FILL 水平でCellの幅に合わせ -
縦方向Align方式(verticalAlignment)の定数(デフォルト:SWT.CENTER)
定数 意味 SWT.BEGINNING /2.上詰め SWT.TOP SWT.CENTER センタリング SWT.END /2.下詰め SWT.BOTTOM SWT.FILL 縦方向でCellの幅に合わせ - インデント設定:horizontalIndent/verticalIndent ==デフォルト:0px= 1 2
gridData.horizontalIndent=20;// 水平方向インデント:20px gridData.verticalIndent=20;// 縦方向インデント:20px
- 行列でCell合併表示:horizontalSpan/verticalSpan 1 2
gridData.horizontalSpan=2;// 水平2Cellを合併 gridData.verticalSpan=2;// 縦2Cellを合併
- Cellエリアは、ウィンドウ大きさの変更より変わる:grabExcessHorizontalSpace/grabExcessVerticalSpace ウィンドウ大きさを変更した時に、設定されたCellの大きさも変更します。デフォルト:false。 1 2
gridData.grabExcessHorizontalSpace=true;// 横方向で gridData.grabExcessVerticalSpace=true;// 縦方向
- コントロールの最小大きさ:minimumWidth/minimumHeight 注:grabExcessHorizontalSpace=true/grabExcessVerticalSpace=trueになる場合のみ有効 1 2
gridData.minimumWidth=100;// 最小幅 gridData.minimumHeight=100;// 最小高さ
- コントロールの大きさ:widthHint/heightHint ==コントロールの幅と高さを設定すること。ウィンドウのサイズを大きくに変更するときにコントロールのサイズも変わります。 画面を初めて実行されたタイミングでのエフェクトです。ウィンドウのサイズを変わった後で、コントロールのサイズも再計算する。 1 2
gridData.widthHint=100;// 设置幅 gridData.heightHint=100;// 设置高さ
- スタイル定数参照表 GridDataを生成するための定数スタイル
スタイル定数 プロパティ設定 GRAB_HORIZONTAL grabExcessHorizontalSpace=true GRAB_VERTICAL grabExcessVerticalSpace=true HORIZONTAL_ALIGN_BEGINNING horizontalAlignment=SWT.BEGINNING HORIZONTAL_ALIGN_CENTER horizontalAlignment=SWT.CENTER HORIZONTAL_ALIGN_END horizontalAlignment=SWT.END HORIAONTAL_ALIGN_FILL horizontalAlignment=SWT.FILL VERTICAL_ALIGN_BEGINNING verticalAlignment=SWT.BEGINNING VERTICAL_ALIGN_CENTER verticalAlignment=SWT.CENTER VERTICAL_ALIGN_END verticalAlignment=SWT.END VERTICAL_ALIGN_FILL verticalAlignment=SWT.FILL FILL_BOTH horizontalAlignment=SWT.FILL/verticalAlignment=SWT.FILL -
FormLayout¶
org.eclipse.swt.layout.FormLayoutは他のウィジェットとの相対位置で配置を指定するレイアウトです。 各ウィジェットのレイアウト情報はFormDataクラスとFormAttachmentクラスを使用して設定します。
- プロパティ:
- 余白と間隔:marginLeft、marginTop、marginRight、marginBottom、marginWidth、marginHeight、spacing デフォルト:0px GridLayoutと違うです
-
FormData FormDataを生成するときに下記のプログラムを指定すること
1 2 3 4
formData.top = new FormAttachment(0, 60);// TopまでのPX formData.bottom = new FormAttachment(100, -5);// bottomまでのPX formData.left = new FormAttachment(20, 0);// 左側までのPX formData.right = new FormAttachment(100, -3);// 右側までのPX
-
使用FormAttachment
- new FormAttachment(int numerator, int offset);
numerator:パーセント値(割合、分母100になる)
offset:オフセット,>0正方向移動,<0逆に。 - new FormAttachment(int numerator, int denominator, int offset);
numerator:分子の数
denominator:分母
offset:オフセット
- new FormAttachment(int numerator, int offset);
numerator:パーセント値(割合、分母100になる)
- コントロール参照位置
FormAttachmentを使うとコントロールの参照位置を設定できます。FormAttachment(Control control, int offset, int alignment)のコンストラクタも使えます。
Control:コントロールオブジェクト
offset:オフセット
alignment:SWT.TOP、SWT.BOTTOM、SWT.LEFT、SWT.RIGHT、SWT.CENTER/SWT.DEFAULT
StackLayout¶
StackLayoutは、TabFolderと似っていますが,もっと上のコントロールのみ表示できること
サンプル¶
FillLayout¶
サンプル:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | //デフォルトのFillLayoutはHORIZONTAL shell.setLayout(new FillLayout()); Group group1 = new Group(shell, SWT.NONE); group1.setText("FillLayout HORIZONTAL"); group1.setLayout(new FillLayout(SWT.HORIZONTAL)); new Button(group1, SWT.PUSH).setText("Button1"); new Button(group1, SWT.PUSH).setText("Button2"); new Button(group1, SWT.PUSH).setText("Button3"); Group group2 = new Group(shell, SWT.NONE); group2.setText("FillLayout VERTICAL"); group2.setLayout(new FillLayout(SWT.VERTICAL)); new Button(group2, SWT.PUSH).setText("Button1"); new Button(group2, SWT.PUSH).setText("Button2"); new Button(group2, SWT.PUSH).setText("Button3"); |

RowLayout¶
サンプル:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | shell.setLayout(new FillLayout()); //------- Group1 Group g1 = new Group(shell, SWT.NONE); g1.setText("HORIZONTAL"); RowLayout layout1 = new RowLayout(); layout1.type = SWT.HORIZONTAL; g1.setLayout(layout1); Button b1 = new Button(g1, SWT.PUSH); b1.setText("Big"); b1.setLayoutData(new RowData(100,50)); Button b2 = new Button(g1, SWT.PUSH); b2.setText("Medium"); b2.setLayoutData(new RowData(70, 50)); Button b3 = new Button(g1, SWT.PUSH); b3.setText("Small"); b3.setLayoutData(new RowData(40,50)); //------- Group1 Group g2 = new Group(shell, SWT.NONE); g2.setText("VERTICAL"); RowLayout layout2 = new RowLayout(); layout2.type = SWT.VERTICAL; g2.setLayout(layout2); Button b4 = new Button(g2, SWT.PUSH); b4.setText("Big"); b4.setLayoutData(new RowData(100,50)); Button b5 = new Button(g2, SWT.PUSH); b5.setText("Medium"); b5.setLayoutData(new RowData(70, 50)); Button b6 = new Button(g2, SWT.PUSH); b6.setText("Small"); b6.setLayoutData(new RowData(40,50)); |

GridLayout¶
サンプル1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | GridLayout layout = new GridLayout(); layout.numColumns = 3; shell.setLayout(layout); GridData gd = null; new Button(shell, SWT.PUSH).setText("Button1"); new Button(shell, SWT.PUSH).setText("Button2"); new Button(shell, SWT.PUSH).setText("Button3"); Button b4 = new Button(shell, SWT.PUSH); b4.setText("Button4"); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; b4.setLayoutData(gd); new Button(shell, SWT.PUSH).setText("Button5"); Button b6 = new Button(shell, SWT.PUSH); b6.setText("Button6"); gd = new GridData(GridData.FILL_BOTH); gd.verticalSpan = 2; b6.setLayoutData(gd); new Button(shell, SWT.PUSH).setText("Button7"); new Button(shell, SWT.PUSH).setText("Button8"); new Button(shell, SWT.PUSH).setText("Button9"); new Button(shell, SWT.PUSH).setText("Button10"); |

- "サンプル2": //TODO
FormLayout¶
サンプル:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // FormLayoutに設定 shell.setLayout(new FormLayout()); // ボタン Button button = new Button(shell,SWT.NULL); button.setText("PUSH"); FormData buttonData = new FormData(); buttonData.top = new FormAttachment(0,0); // ウィンドウの上側にはりつく buttonData.right = new FormAttachment(100,0); // ウィンドウの右側にはりつく button.setLayoutData(buttonData); // テキストフィールド Text text = new Text(shell,SWT.BORDER); FormData textData = new FormData(); textData.top = new FormAttachment(0,0); // ウィンドウの上側にはりつく textData.left = new FormAttachment(0,0); // ウィンドウの左側にはりつく textData.right = new FormAttachment(button,0); // ボタンの左側にはりつく text.setLayoutData(textData); text.setText("これはFormLayoutの設定サンプル!"); |
