=============SWT布局管理器入门总结=======================
绝对定位:
* setBounds(int x, int y, int width, int height);
托管定位:
* setLayout(Layout layout);
* 常见的布局有FillLayout、RowLayout、GridLayout、FormLayout、StackLayout。
===========================================
常见的布局管理器:
* 所有布局都是org.eclipse.swt.widgets.Layout的子类,Layout类是一个抽象类,每个具体的布局都要继承Layout类。
* SWT中常见的布局类:
* FillLayout(充满式布局):在单行或者单列中放置相同大小的控件,是最简单的布局。
* RowLayout (行列式布局):在单行或者多行中放置控件,应用了fill、wrap和spacing等选项
* GridLayout(网格式布局):像表格一样放置控件,功能很强大,几乎能满足各种布局需要。
* FormLayout(表格式布局):与GridLayout功能差不多的布局,可以通过定义4个边的"附加值"来放置控件。
* StackLayout(堆栈式布局):类似堆栈式的布局,只显示最上方的控件。
* FillLayout、RowLayout、GridLayout、FormLayout在class org.eclipse.swt.layout.*包中,
* StackLayout在org.eclipse.swt.custom.*包中。
=============================================
----------------------|------------------------|--------------------------------
-| FillLayout(充满式布局)|
----------------------|------------------------|---------------------------------
设置控件布局的规则是:试图填充一行或一列,尽可能地充满整个面板,并且强制所有控件平均分配大小。
FillLayout不会自动拆行,也不能设置每个控件之间的间隙,但能够指定面板的四周的补白。
* 设置填充方式:type属性
layout.type=SWT.HORIZONTAL/SWT.VERTICAL;// 默认水平填充
* 设置四周补白:marginHeight、marginWidth、spacing属性
layout.marginHeight=10;// 设置上下补白高度
layout.marginWidth=10; // 设置左右补白宽度
layout.spacing=5; // 设置控件之间的间隙
=================================================
----------------------|------------------------|----------------------------------------
| RowLayout(行列式布局)|
----------------------|------------------------|----------------------------------------
RowLayout填充控件时可以折行显示,并且可以使用RowData设置某一个指定控件的大小。
* 设置折行显示:wrap属性
layout.wrap=true/false;// 默认为true
* 设置空间大小:pack属性
layout.pack=false/true;// 默认为true
* 设置填充方式:type属性
layout.type=SWT.VERTICAL/SWT.HORIZONTAL;// 默认为水平填充
* 设置是否充满整行:justify属性
layout.justify=true/false;// 默认为false
注:如果设置了layout.justify=true后,再设置layout.spacing属性,如果这时窗口足够大,该属性将不起作用。
* 设置补白和间隔:marginLeft、marginTop、marginRight、marginBottom、spacing
默认大小为3像素。
layout.marginLeft=10;
layout.marginTop=10;
layout.marginRight=10;
layout.marginBottom=10;
layout.spacing=10;
* 设置控件的大小:RowData
setLayoutData(new RowData(int width, int height));
* 设置是否等宽或等高:fill属性
水平同高,垂直同宽
layout.fill=true;// 默认为false
===================================================
----------------------|------------------------|----------------------------------------
|GridLayout(网格式布局)|
----------------------|------------------------|----------------------------------------
* 设置网格的列数:numColumns属性
layout.numColumns=3;// 默认为1列
* 设置网格等宽:makeColumnsEqualWidth属性
layout.makeColumnsEqualWidth=true;// 默认为false
* 设置补白和间隔:
marginLeft、marginTop、marginRight、marginBottom、horizontalSpacing、verticalSpacing
默认为5像素大小。
layout.marginLeft=10; // 左空白
layout.marginTop=10; // 上空白
layout.marginRight=10; // 右空白
layout.marginBottom=10; // 下空白
layout.horizontalSpacing=10;// 水平间隔
layout.verticalSpacing=10; // 垂直间隔
* 设置控件大小:GridData
注:不要重用GridData对象
* 设置单元格对齐方式:horizontalAlignment和verticalAlignment属性
1、水平对齐方式(horizontalAlignment)的样式常量(默认为SWT.BEGINNING)
* SWT.BEGINNING(或者SWT.LEFT):左对齐
* SWT.CENTER:水平居中
* SWT.END(或者SWT.RIGHT):右对齐
* SWT.FILL:水平充满整个单元格
2、垂直对齐方式(verticalAlignment)的样式常量(默认为SWT.CENTER)
* SWT.BEGINNING(或者SWT.TOP):上对齐
* SWT.CENTER:垂直居中
* SWT.END(或者SWT.BOTTOM):下对齐
* SWT.FILL:垂直充满整个单元格
* 设置缩进大小:horizontalIndent和verticalIndent属性
默认为0像素大小。
gridData.horizontalIndent=20;// 水平缩进20像素
gridData.verticalIndent=20;// 垂直缩进20像素
* 设置单元格跨行和跨列显示:horizontalSpan和verticalSpan属性
gridData.horizontalSpan=2;// 设置水平跨越两个单元格
gridData.verticalSpan=2;// 设置垂直跨越两个单元格
* 设置单元格空间的抢占方式:grabExcessHorizontalSpace和grabExcessVerticalSpace属性
可以设置当面板变化时,单元格所抢占空间的方式,默认值为false。
gridData.grabExcessHorizontalSpace=true;// 设置水平抢占
gridData.grabExcessVerticalSpace=true;// 设置垂直抢占
* 设置的控件大小:minimumWidth和minimumHeight属性
可以设置控件最小的宽度和高度。
注:这两个属性仅当grabExcessHorizontalSpace=true和grabExcessVerticalSpace=true时才生效
gridData.minimumWidth=100;// 最小宽度
gridData.minimumHeight=100;// 最小高度
注:设置了该属性值,即使窗口变小了,也不会超过这个值的大小。
* 设置控件大小:widthHint和heightHint属性
可以设置控件的长和宽。当窗口变大时,控件的大小也会随着窗口的改变而改变。
gridData.widthHint=100;// 设置宽度
gridData.heightHint=100;// 设置高度
注:设置了widthHint和heightHint属性后只是在程序刚一运行时才会起作用,而随着窗口改变,会重新计算控件的大小。
=======================================================
----------------------|------------------------|----------------------------------------
| * 样式常量对照表 |
----------------------|------------------------|----------------------------------------
创建GridData的第二种方式是使用样式常量。
样式常量对应属性值
GRAB_HORIZONTALgrabExcessHorizontalSpace=true // 设置水平抢占
GRAB_VERTICALgrabExcessVerticalSpace=true // 设置垂直抢占
//1.水平对齐方式(horizontalAlignment)的样式常量(默认为SWT.BEGINNING)
HORIZONTAL_ALIGN_BEGINNINGhorizontalAlignment=SWT.BEGINNING//左对齐
HORIZONTAL_ALIGN_CENTERhorizontalAlignment=SWT.CENTER //水平居中
HORIZONTAL_ALIGN_ENDhorizontalAlignment=SWT.END// * SWT.END(或者SWT.RIGHT):右对齐
HORIAONTAL_ALIGN_FILLhorizontalAlignment=SWT.FILL// * SWT.FILL:水平充满整个单元格
// 2、垂直对齐方式(verticalAlignment)的样式常量(默认为SWT.CENTER)
VERTICAL_ALIGN_BEGINNINGverticalAlignment=SWT.BEGINNING// * SWT.BEGINNING(或者SWT.TOP):上对齐
VERTICAL_ALIGN_CENTERverticalAlignment=SWT.CENTER// * SWT.CENTER:垂直居中
VERTICAL_ALIGN_ENDverticalAlignment=SWT.END// * SWT.END(或者SWT.BOTTOM):下对齐
VERTICAL_ALIGN_FILLverticalAlignment=SWT.FILL// * SWT.FILL:垂直充满整个单元格
FILL_BOTHhorizontalAlignment=SWT.FILL和verticalAlignment=SWT.FILL //双向抢占式
=========================================================
----------------------|------------------------|----------------------------------------
| FormLayout(表格式布局)|
----------------------|------------------------|----------------------------------------
FormLayout通过设置FormData四边的附加值(FormAttachment对象)来设置控件的布局。
一个附加值让一个控件指定的一边附加到父面板窗口类(Composite)的位置或者其他控件上。
所以,这种布局可以指定某两个控件的相对位置,并且能随着窗口的改变而改变。
* 设置补白和间隔:marginLeft、marginTop、marginRight、marginBottom、marginWidth、marginHeight、spacing
默认为0像素大小。与GridLayout不同
* 使用FormData对象
在创建FormData对象时,通常要指定4个边的位置。
formData.top = new FormAttachment(0, 60); // 设置上边框位置
formData.bottom = new FormAttachment(100, -5);// 设置下边框位置
formData.left = new FormAttachment(20, 0);// 设置左边边框位置
formData.right = new FormAttachment(100, -3);// 设置右边框位置
* 使用FormAttachment对象
* new FormAttachment(int numerator, int offset);
numerator是分子数(因为默认的分母是100),所以也可以理解为所占的百分比。
offset是偏移量,如果是正数正向偏移,若是负数则反向偏移。
* new FormAttachment(int numerator, int denominator, int offset);
numerator是分子数
denominator是分母数
offset是偏移量
* 设置控件的相对位置
在使用FormAttachment对象时,可以设置相对面板的位置,也可以设置相对一控件的位置,
可以使用FormAttachment(Control control, int offset, int alignment)构造方法。
Control为所附加的控件对象,offset是相对于控件偏移的像素数,alignment使用样式常量,
SWT.TOP、SWT.BOTTOM、SWT.LEFT、SWT.RIGHT、SWT.CENTER和SWT.DEFAULT表示是按照附加控件的哪个边开始偏移位置的。
当控件设置FormAttachment对象时,可以保证在窗口调整的情况下,控件相对位置保持不变。
=============================================================
----------------------|------------------------|----------------------------------------
|StackLayout(堆栈式布局)|
----------------------|------------------------|----------------------------------------
StackLayout堆栈式布局类似于选项卡(TabFolder),当前只显示最上方的控件。
===========================================================
----------------------|------------------------|----------------------------------------
| Eclipse插件开发系列5.SWT中的布局管理器(4) |
----------------------|------------------------|----------------------------------------
==============================================================================
常见的布局管理器:
* 所有布局都是org.eclipse.swt.widgets.Layout的子类,Layout类是一个抽象类,每个具体的布局都要继承Layout类。
* SWT中常见的布局类:
* FillLayout(充满式布局):在单行或者单列中放置相同大小的控件,是最简单的布局。
* RowLayout (行列式布局):在单行或者多行中放置控件,应用了fill、wrap和spacing等选项
* GridLayout(网格式布局):像表格一样放置控件,功能很强大,几乎能满足各种布局需要。
* FormLayout(表格式布局):与GridLayout功能差不多的布局,可以通过定义4个边的"附加值"来放置控件。
* StackLayout(堆栈式布局):类似堆栈式的布局,只显示最上方的控件。
* FillLayout、RowLayout、GridLayout、FormLayout在class org.eclipse.swt.layout.*包中,
* StackLayout在org.eclipse.swt.custom.*包中。
================================================================