文章还不够完善,后续会慢慢补充
1 定义
GUI:图形用户界面
SWT: 平稳小波变换,或者静态小波变换,开源IDE-eclipse就是用SWT开发的
SWT的所有的类都在org.eclipse.swt下
SWT:与 AWT/SWING 不相伯仲,但是组件更为丰富,平台表现稳定, BUG 也相对较少(相对而言) 。
如果你的应用程序真的需要在多个平台上运行,需要更为美观的界面,又不那么依赖于其他
基于 AWT/SWING 的图形库
2 属性
SWT组成:
1 本地库:负责与操作系统通讯
2 显示类:作为SWT与GUI的通讯接口
3 一个Shell类,程序的顶层窗口
组件可以用方法 setBounds (int x, int y, int width, int height) 来指定该组件相对于父组件
的位置和组件的大小。组件的这种定位方式称为绝对定位。
SWT的布局管理器:
一些布局管理器只使用它们自身的参数就可以控制,而另一些布局管理器还需要其它参数( LayoutData ),该参数是在设置布局管理器的复合组件中的每个控件上指定的。 SWT中常用的布局管理器有如下一些:
1. 充满式布局FillLayout
FillLayout :充满式布局,在容器中以相同的大小以单行或单列排列组件。没有FillData类
1) 构造方法:
FillLayout() 创建按一行充满容器的对象。
FillLayout(int type) 创建按指定类型充满容器的对象,指定类型 (type )有:
SWT.HORIZONTAL按一行充满容器。 SWT.VERTICAL 按一列充满容器。
2) 属性:
marginWidth:用来设置窗口中最顶端的一行组件和最底端的一行组件在垂直方向距离容器的上边框和下边框的距离
marginHeight,:用来设置容器中最左边的一列组件和最右边的一列组件在水平方向距离容器的左边框和右边框的距离 Spacing:用来设置窗口中任意一行组件之间在水平方向的距离
2. 行列式布局RowLayout
RowLayout :行列式布局,以单行或多行的方式定制组件的排列方式。可以使组件折行显示,可以设置边界距离和间距。另外,还可以对每个组件通过 setLayoutData()方法设置 RowData 对象。RowData 用来设置组件的大小。
1) 构造方法:
RowLayout() 创建按行放置组件的对象。
RowLayout(int type) 创建按指定类型放置组件的对象。指定类型 (type )有:
SWT.VERTICAL 按列放置组件。 SWT.HORIZONTAL按行放置组件。
2).常用属性:
int marginWidth:组件距容器边缘的宽度(像素),默认值为 0。
int marginHeight:组件距容器边缘的高度(像素),默认值为 0。
int marginTop:组件距容器上边缘的距离 (像素),默认值为 3。
int marginBottom:组件距容器下边缘的距离 (像素),默认值为 3。
int spacing:组件之间的距离,默认值为 3。
booleanjustify:如果该属性为 true,则组件间的距离随容器的拉伸而变大。默认值为false。
booleanwrap:如果该属性为 true,则当容器空间不足时会自动折行;如果该属性为 false,不自动折行。默认值为 true。
booleanpack:如果该属性为 true,组件大小为设定值;如果该属性为 false,则强制组件的大小相同。默认值为 true。
int type:使组件按指定式样放置,(type=SWT.HORIZONTAL|SWT.VERTICAL ),默认为按行放置,默认值为 SWT.HORIZONTAL。
3 RowData 类:
RowData称为 RowLayout 的布局数 类,可用于改变容器中组件的外观形状。其构造方法:
RowData(intwidth,int height);
3. 网格式布局GridLayout
GridLayout :网格式布局,以网格的方式进行布局,组件可以占用指定的一个或几个网格。
把容器分成网格,把组件放置在网格中。GridLayout 有很多可配置的属性,有专用的布局数类GridData,GridLayout 强大之处在于它可以通过 GridData 来设置每个组件的外观形状。GridLayout 的构造方法无参数,
l New GridLayout()默认布局将容器设置成一列所有组件在容器中从上至下均排成一列
l New GridLayout(int num,Boolean columnsEqual)设置列数和是否等宽
1 GridLayout 的属性
int numColumns:设置容器的列数,组件从左到右按列放置,当组件数大于列数时,下一个组件将自动添加新的一行。默认值为 1 列。
boolean makeColumnsEqualWidth:强制使列都具有相同的宽度,默认值为 false。
int horizontalSpacing:设置列与列之间的间隔,默认值为 5。
int verticalSpacing:设置行与行之间的间隔,默认值为 5。
intmarginWidth:设置最左边或最右边组件与容器边缘的水平距离,默认值为 5。
intmarginHeight:设置顶部或底部组件与容器边缘的垂直距离,默认值为 5。
marginLeft:用来控制左边的一列组件与左边框的距离
marginTop:用来控制顶部组件与上边框的距离
marginRight:用来控制右边的一列组件与右边框的距离
marginBottom用来设置底部组件与底边框的距离
2.布局数 类 (GridData 类)
GridData 是 GridLayout 专用的布局数类,用 GridData 可以构建很多复杂的布局方式。
①GridData 的构造方法如下:
GridData(); 创建一个属性值为默认值的对象。
GridData(inttype); 创建一个指定类型(type )的对象。
② GridData 常用类型如下:
GridData.FILL 通常与 GridData 类的对象属性 horizontalAlignment 和 verticalAlignment配合使用,充满对象属性指定的空间。
GridData.FILL_HORIZONTAL 水平充满,组件充满网格水平方向的空间。
GridData.FILL_VERTICAL 垂直充满,组件充满网格垂直方向的空间。
GridData.FILL_BOTH 双向充满,组件充满水平和垂直方向的空间。
GridData.HORIZONTAL_ALIGN_BEGINNING水平对齐靠左,组件在网格中靠左放
置。
GridData.HORIZONTAL_ALIGN_CENTER水平对齐居中,组件在网格中居中放置。
GridData.HORIZONTAL_ALIGN_END水平对齐靠右,组件在网格中靠右放置。
③ GridData 常用对象属性:
inthorizontalSpan 设置组件占用的列数,默认值为 1。
intverticalSpan 设置组件占用的行数,默认值为 1。
heightHint:用来设置组件的高度
widthHint:用来设置组件的宽度
grabExcessHorizontalSpace:设置组件在水平方向所占的空间
grabExcessVerticalSpace:设置组件在垂直方向所占的空间
horizontalIndent:设置组件向右移动如果为负值则向左移动但是组件本身大小不变
verticalIndent:设置组件向下移动如果为负值则向上移动但是组件本身大小不变
horizontalAlignment 设置组件的对齐方式为水平方向。
verticalAlignment 设置组件的对齐方式为垂直方向。
horizontalAlignment和verticalAlignment 可以取以下值:
l BEGINNING 开始 (水平对齐时居左;垂直对齐时居上)----- horizontalAlignment的默认值
l CENTER 居中------- verticalAlignment的默认值
l END 结束 (水平对齐时居右;垂直对齐时居下)
l FILL 充满
4. 表格式布局FormLayout
FormLayout :表格式布局,通过定义组件四个边的距离来排列组件,被引用的相对的组件可以是父组件,也可以是同一容器中的其它组件。
表格式布局(FormLayout 类)是一种非常灵活、精确的布局方式,这个布局是 SWT2.0版新增的。FormLayout 也有专用的布局数类 FormData ,此外,还增加了一个FormAttachment类。FormAttachment 定义了组件的四边与父容器(Shell、Composite 等 )
的边距,为保证组件在父容器中的相对位置不变,FormAttachment 类用不同的构造方法来实现组件的定位,用 FormData 和 FormAttachment 配合,可以创建复杂的界,而且当主窗体大小改变时,组件的相对位置能保持相对不变。FormLayout的构造方法:FormLayout()。
1 FormLayout 的属性
int marginWidth:设置组件与容器左边缘或右边框的水平距离 --对应的是左边和右边的空白大小.空白的默认值是0
int marginHeight:设置组件与容器边缘的垂直距离---顶部和底部的空白大小, 默认值为 0。
int marginTop:效果同marginHeight
int marginLeft:效果同marginWidth
例如,以下代码把父容器 (shell)的四周边距都设置成 10 像素。
Display display = new Display();
Shell shell = newShell(display);
FormLayout formlayout= newFormLayout ();
formlayout.marginHeight = 10;
formlayout.marginWidth = 10;
shell.setLayout (formlayout);
2 FormData 类
①FormData 的默认构造方法
FormData(int width,intheight) 参数 width 和 height 设置组件的宽度和高度。
②FormData 的属性配合FormAttachment设置自适应
width 设置组件的宽度。
height 设置组件的高度。
top 和FormAttachment 配合设置组件顶部和父容器顶部的边距。
bottom 和FormAttachment 配合设置组件底部和父容器底部的边距。
left 和 FormAttachment配合设置组件左边和父容器左边的边距。
right 和FormAttachment 配合设置组件右边和父容器右边的边距。
如果 FormData 中的 width 和 height 设置的宽度和高度与 FormAttachment 设置的约束发生冲突,则按照 FormAttachment 设置,width 和 height 的设定值就不起作用了。
3 FormAttachment 类
Attachment 的含义是附着、粘贴。FormAttachment类就是用来指定组件在父容器中的粘贴位置。FormAttachment 计算组件粘贴位置和组件大小的方法是依下 的表达式:
y = ax + b
表达式中 y 是纵坐标,从上往下是正方向;x 是横坐标,从左至右是正方向;a 是斜率
(a=m/n,n≠0 ), b 是偏移量,沿 x、y 轴正方向的偏移量为正,反之为负。.
①FormAttachment 的构造方法
FormAttachment() 组件紧贴父容器的左边缘和上边缘,如果父容器设置了 FormLayout属性 marginWidth 和 marginHeight ,则距父容器的上边缘和左边缘为 marginHeight和marginWidth 的设定值。
l FormAttachment(Control control, int offset) 以指定的组件 control 为参照物,相对指定组件的偏移量为 offset。
l FormAttachment(Control control, int offset,int alignment)以指定的组件 control 为参照物,相对指定组件的偏移量为 offset,对齐方式为 alignment 。alignment 的取值如下:SWT.TOP、SWT.BOTTOM、SWT.LEFT、SWT.RIGHT、SWT.CENTER , alignment也可理解为参考control参照物的某一方面参数设置,在此基础上进行偏移offset
l FormAttachment(int m,int n, int offset) 以组件相对于父容器宽度或高度的百分 (即斜率 a)来给组件定位,m 为 a 的分子,n 为 a 的分母,offset 是偏移量。
l FormAttachment(int m, int offset) 以组件相对于父容器宽度或高度的百分比 (即斜率 a)来设置组件的偏移量,m 为 a 的分子,a 的分母为默认值 100,offset是偏移量。
例如: data.right = new FormAttachment(100,-20);组件相对于Shell容器右边框向左移动20个像素
l FormAttachment(int m) 以组件相对于父容器宽度或高度的百分比 (即斜率 a)来给组件定位,m 为 a 的分子,a 的分母为默认值 100,偏移量为默认值 0。
注:FormData最多包含4个FormAttachment 实例,每个对应了与它联系的部件的一边.另外,FormData也可以指定宽和高.表四列出了FormData的数据成员: Attribute
FormAttachment bottom用来指定部件的底部位置
FormAttachment left用来指定部件的左部位置
FormAttachment right用来指定部件的右部位置
FormAttachment top用来指定部件的顶部位置
注:当你生成一个FormData对象,你可以自己传给它宽和高的值.如果你没有指定FormAttachment对象,部件会自动以parent composite的上边界和左边为起始边界.如果你这样定义了多个部件,它们会都在composite的左上角.