Layout是用来对复合部件里的widget进行布局
有四种类型:
FillLayout RowLayout GridLayout FormLayout
1. FillLayout
充满式布局,会铺满整个父复合控件,它会以同样大小对父组件中的子组件进行布局,这些子组件将以一行或一列的形式排列。
水平排列: FillLayout fillLayout = new FillLayout(SWT.HORIZONTAL); composite.setLayout ( fillLayout );
如图所示,控件铺满整个父复合控件,每个控件在垂直方向上拉伸铺满,在水平方向上每个控件占据同样的大小来铺满,在同一行上进行排列。
垂直排列:FillLayout fillLayout = new FillLayout(SWT.VERTICAL); composite.setLayout ( fillLayout );
如图所示,控件铺满整个父复合控件,每个控件在水平方向上拉伸铺满,在垂直方向上每个控件占据同样的大小来铺满,在同一列上进行排列。
2. RowLayout
RowLayout布局不会默认铺满整个父复合控件,也是按行或按列排列控件,但RowLayout布局会自动换行。
如定义了5个button:
调整窗口大小会自动换行:
在布局时可以设置控件与父复合控件四周的像素距离,分别为rowLayout.marginLeft,rowLayout.marginTop,rowLayout.marginRight,rowLayout.marginBottom。
3. GridLayout
网格布局,也是比较常用的布局方式,把父组件分成一个表格.默认情况下每个子组件按行优先占据一个单元格的空间,每个子组件按添加到父组件的顺序排列在表格中
无参的构造方法:GridLayout gridLayout = new GridLayout(); 若不再设置列数和是否每列宽度相同,则默认为1列,每列的宽度相同,也可设置gridLayout.numColumns和gridLayout.makeColumnsEqualWidth
带参的构造方法:GridLayout gridLayout = new GridLayout(numColumns, true); 第一个参数是设置列数,第二个参数是设置是否每列的宽度相同
如:Gridlayout gridlayout = new Gridlayout(2, true);
在布局时也可以设置与父复合控件四周的像素距离
在GridLayout布局中提供了GridData类,用于设置每个子组件的外观及大小。
在GridData类中有heightHint()和 widthHint()分别是设置高度和宽度,horizontalSpan()是设置跨的列数,设置完gridData后,把有相应设置的控件**.setLayoutData( gridData)
在上图中,button1和button4是设置了同一个gridDate,button2和button3设置了同一个gridDate
4. FormLayout
这个布局是相对定位,是以父复合控件的边缘或其他控件为基准的布局。
和GridLayout布局相似的是有一个FormDate类可以设置子组件的属性
FormLayout formLayout = new FormLayout(); //定义布局方式
FormData formData = new FormData();
formData.left = new FormAttachment(0, 0); //FormAttachment第一个参数为int型时表示左边边缘在父复合控件宽度的百分比,第二个参数为在刚才百分比的基础上加上的像素值
formData.top = new FormAttachment(0, 0); //第一个参数为上边边缘在父复合控件高度的百分比,第二个参数为刚才百分比的基础上加上的像素值
Button button1 = new Button(shell, SWT.PUSH);
button1.setText("button1");
button1.setLayoutData(formData);
FormData formData2 = new FormData();
formData2.left = new FormAttachment(button1, 0); // FormAttachment第一个参数为control型时是左边的控件,第二个参数为该控件与左边控件的距离
formData2.top = new FormAttachment(0, 0);
formData2.right = new FormAttachment(100, -10); //FormAttachment第一个参数为int型时表示右边边缘在父复合控件宽度的百分比,第二个参数在刚才百分比的基础上加上的像素值
Button button2 = new Button(shell, SWT.PUSH);
button2.setText("button2");
button2.setLayoutData(formData2);
shell.setLayout(formLayout);
在FormAttachment类的构造方法里第二个参数,为相对的控件或父复合控件的位置上加上的像素值,若为负值,就是减去想应的像素值
Eclipse 插件开发 SWT之Layout
原文:http://www.cnblogs.com/flying123/p/5017203.html