1.2 标准布局
SWT中的标准布局类有:
l FillLayout:以相同的大小单行或单列的排列组件;
l RowLayout:以单行或多行的方式使用fill,wrap,spacing,等选项排列组件;
l GridLayout:在格子中排列组件;
l FormLayout(SWT 2.0的新特性):通过创建组件各个边的“附件”来排列组件。
要使用标准布局类,需要引入SWT布局类包:
import org.eclipse.swt.layout.*;
布局是可插入的。要设置Composite组件的布局,使用setLayout(Layout)方法。一下代码演示了,一个Shell(Composite的子类)采用RowLayout来布局它的子组件。
Shell shell = new Shell();
shell.setLayout(new RowLayout());
一个布局类可以有一个相应的布局数据类(Object的子类),可以对指定的子控件设置具体的布局方式。为了使用方便,布局数据类的名字是通过替换布局类的Layout为Data而得到。例如,标准布局类RowLayout的布局数据类是RowData,GridLayoutt的布局数据类是GridData,FormLayout的布局数据类是FormData。以下代码演示了如何设置组件的布局数据:
Button button = new Button(shell, SWT.PUSH);
button.setLayoutData(new RowData(50, 40));
1.3 本文档使用的例子
本文档的多数屏幕截图是根据不同变量运行下面示例代码得到的。可以更改布局的类型、参数以及子组件的类型和数量:
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
public class LayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
//创建布局
RowLayout layout = new RowLayout();
// 设置可选的选项
layout.wrap = true;
// 设置到容器上
shell.setLayout(layout);
// 创建容器的子组件
new Button(shell, SWT.PUSH).setText("B1");
new Button(shell, SWT.PUSH).setText("Wide Button 2");
new Button(shell, SWT.PUSH).setText("Button 3");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) display.sleep();
}
}
}
运行上面的代码,得到下图:

如果调整上面的界面,使右面放置不下Button 3,那么RowLayout将折行,在下一行显示Button 3,如图:

使用布局受调整大小的很大限制。因此本文档的多数例子演示了如果容器变大或变小将如何布局,以此说明布局的工作原理。
(待续)