容器类
面板Composite类
常用方法:
getLayout() 得到布局管理器
getLayoutData() 得到布局管理器数据
getParent() 得到该容器的父容器
getShell() 得到该容器的shell
layout() 将容器中的组件重新布局
分组框Group类
用法与Composite基本相同
选项卡
TabFolder类和TabItem类 TabFolder是容器,可以容纳其他容器和组件,但TabItem不是容器,可以把它看成一个选项标签,TabFolder通过TabItem对其中的组件进行控制,每个TabItem用setControl()方法来控制一个界面组件
TabFolder tabFolder = new TabFolder(shell,SWT.NONE); tabFolder.setBounds(5,5,180,130); TabItem tabItem1 = new TabItem(tabFolder,SWT.NONE); tabItem1.setText("选项1"); { Group group1 = new Group(tabFolder,SWT.NONE); group1.setText("录入信息"); tabItem1.setControl(group1); Label lb1 = new Label(group1,SWT.NONE); lb1.setText("姓名:"); lb1.setBounds(10,20,70,20); Text text1 = new Text(group1,SWT.BORDER); text1.setBounds(90,20,70,20); Label lb2 = new Label(group1,SWT.NONE); lb2.setText("地址:"); lb2.setBounds(10,50,70,20); Text text2 = new Text(group1,SWT.BORDER); text2.setBounds(90,50,70,20); } TabItem tabItem2 = new TabItem(tabFolder,SWT.NONE); tabItem2.setText("选项2"); { Group group2 = new Group(tabFolder,SWT.NONE); group2.setText("兴趣爱好:"); tabItem2.setControl(group2); Button bt1 = new Button(group2,SWT.CHECK); bt1.setText("音乐"); bt1.setBounds(20,20,70,20); Button bt2 = new Button(group2,SWT.CHECK); bt2.setText("美术"); bt2.setBounds(20,50,70,20); Button bt3 = new Button(group2,SWT.CHECK); bt3.setText("体育"); bt3.setBounds(20,80,70,20); }
布局管理器
不同操作系统对屏幕的定义不一样,SWT采用了布局方式,用户通过使用布局来控制组件中元素的的位置和大小等信息。
setBounds() 为绝对定位,组件较多时,使用布局管理器LayoutManager来定位,成为托管定位。
四种基本布局管理器:FillLayout RowLayout GridLayout FormLayout
布局管理器中,每当重新设置复合组件的大小,都需要重新定位。
FillLayout 充满式布局 容器中以相同大小以单行或单列排列组件
RowLayout 行列式布局 以单行或多行方式排列
GridLayout 网格式布局 组件可以占用制定的一个或几个网格
FormLayout 表格式布局 定义组件四个边的距离来排列组件
FillLayout类
构造方法:
FillLayout() 创建一行充满的容器
FillLayout(int type)
type的取值:
SWT.HORIZONTAL 按一行充满
SWT.VERTICAL 按一列充满
FillLayout filllayout = new FillLayout(SWT.VERTICAL); shell.setLayout(filllayout); new Button(shell,SWT.PUSH).setText("按钮1"); new Button(shell,SWT.PUSH).setText("按钮2"); new Button(shell,SWT.PUSH).setText("按钮3"); new Button(shell,SWT.PUSH).setText("按钮4");
行列式布局
RowLayout类使组件折行显示 可以设置边界距离和间距。可以对每个组件通过setLayoutData()方法设置RowData对象。RowData用来设置组件的大小。
构造方法:
RowLayout()
RowLayout(int type)
SWT.VERTICAL
SWT.HORIZONTAL
常用属性:
int marginWidth 组件具容器边缘的宽度(像素)默认0
int marginHeight 。。。。。。。。高度。。。。。。0
int marginTop 。。。。。。。。上边缘。。。。。3
int marginBottom 。。。。。。。。下边缘。。。。。3
int spacing 组件间的距离 默认3
bollean justify true:组件间的距离随容器拉伸而变大 默认false
boolean wrap true:容器空间不足时 自动折行 默认 true
boolean pack true:组件大小为设定值 fasle:强制组件大小相同 默认true
int type 默认按行放置
RowData类
RowLayout的布局数据类 用于改变组件的外观形状
RowData(int width, int height)
网格式布局
GridLayout类 较为复杂的一种布局
有专门的布局数据类GridData 可以通过GridData设置每一个组件的外观形状
GridLayout构造无参数 通过GridData和设置GridLayout属性来设置组件的排列及组件的形状和位置
GridLayout的属性
int numColumns 设置容器列数 组件从左到右排列 组件数大于列数时 一个组件将自动添加新的一行
boolean makeColumnsEqualWidth 强制使列都有相同的宽度 默认falsse
int marginWidth 设置组件与容器边缘的水平距离 默认5
int marginHeight 设置组件与容器边缘的垂直距离 默认5
int horizontalSpacing 设置列与列之间的间隔 默认5
int verticalSpacing 设置行与行之间的间隔 默认5
布局数据类
GridData类
构造方法:
GridData()
GridData(int type)
GridData常用type: 这些常数不在SWT中 而在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常用对象属性
int horizontalSpan 设置组件占用的列数 默认1
int verticalSpan 设置组件占用的行数 默认1
horizantalAlignment 设置组件的对齐方式为水平方向(取值为BEGINNING CENTER END FILL 默认BEGINNING)
verticalAlignment 设置组件的对齐方式为垂直方向(取值同上 默认CENTER)
grabExcessHorizontalSpace 抢占额外的水平空间
grabExcessVerticalSpace 抢占额外的垂直空间
表格式布局
FormLayout类
FoemData类 FormAttachment类