- https://help.eclipse.org/latest/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/layout/package-summary.html
- 绝对布局 absolute
- 表单布局 FormLayout (相对布局)
- 填充布局 FillLayout(水平填充、垂直填充)
- 网格布局 GridLayout(列数、列宽度是否相同)
- 行布局 RowLayout(水平行、垂直行)
- 栈布局 StackLayout (后进先显示)
通过Composite.setLayout()方法设置布局
org.eclipse.swt.widgets.Composite#setLayout(null)绝对布局 absolute 设置绝对布局
setLayout(null)设置组件位置、大小
通过Control.setBounds方法设置组件位置、大小
org.eclipse.swt.widgets.Control#setBounds (int x, int y, int width, int height)
x:水平距离
y:垂直距离
(0,0)是窗体的左上角。
案例:
btnNewButton.setBounds(0, 0, 50, 50);//按钮显示在窗体的左上角宽、度高多都为50表单布局 FormLayout 设置表单布局
setLayout(new FormLayout());设置组件布局数据
- 通过org.eclipse.swt.widgets.Control#setLayoutData设置布局数据
- 通过org.eclipse.swt.layout.FormData 创建布局数据
Button btnNewButton = new Button(this, SWT.NONE);
FormData fd_btnNewButton = new FormData();
fd_btnNewButton.top = new FormAttachment(0, 10);
fd_btnNewButton.left = new FormAttachment(0, 10);
btnNewButton.setLayoutData(fd_btnNewButton);
btnNewButton.setText("New Button");
Button btnNewButton_1 = new Button(this, SWT.NONE);
FormData fd_btnNewButton_1 = new FormData();
fd_btnNewButton_1.top = new FormAttachment(btnNewButton, 0, SWT.TOP);//相对btnNewButton
fd_btnNewButton_1.left = new FormAttachment(btnNewButton, 6);
btnNewButton_1.setLayoutData(fd_btnNewButton_1);
btnNewButton_1.setText("New Button");
填充布局 FillLayout
设置填充布局
setLayout(new FillLayout(SWT.HORIZONTAL));//水平填充 setLayout(new FillLayout(SWT.VERTICAL));//垂直填充
- 组件后会按水平或垂直填充整个窗体。
- 调整窗体大小组件随之改变大小填充。
setLayout(new GridLayout(2, false));
构造方法
public GridLayout (int numColumns, boolean makeColumnsEqualWidth)
- 创建网格布局是需要指定列数、列是否等宽
- 通过org.eclipse.swt.widgets.Control#setLayoutData设置组件布局数据。
- 通过org.eclipse.swt.layout.GridData设置网格数据。可以设置水平、垂直对齐类型(左对齐、居中对齐、右对齐、填充对齐),水平、垂直跨越单元格个数。
GridData 构造方法
public GridData (int horizontalAlignment, int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace, int horizontalSpan, int verticalSpan)
- horizontalAlignment 水平对齐方式
- verticalAlignment 垂直对齐方式
- grabExcessHorizontalSpace 单元格是否足够宽以适应剩余的水平空间,是否预留足够宽度,可以设置为false使对齐。
- grabExcessVerticalSpace 单元格是否足够高以适应剩余的垂直空间,是否预留足够宽度,可以设置为false使对齐。
- horizontalSpan 水平跨度(单元格合并的意思)
- verticalSpan 垂直跨度(单元格合并的意思)
setLayout(new RowLayout(SWT.VERTICAL));//水平行 setLayout(new RowLayout(SWT.HORIZONTAL));//垂直行
添加组件后会水平或垂直排列。
栈布局 StackLayout 设置栈布局setLayout(new StackLayout());
添加组件按后进或先进先 填充整个窗体。
组合布局可以通过org.eclipse.swt.widgets.Composite 进行组合布局。
源码https://github.com/jast90/java-tutorial/tree/master/swt/hello-swt/src/main/java/io/gitub/jast90/swt/basic/layout



