Layout

composite.setLayout(layout);
shell.layout();//通知容器开始布局

1 AbsoluteLayout(默认),必须用setBounds()指定位

2FillLayout,所有子控件从左到右(SWT.Horizontal,默认)或上到下(SWT.Vertical)平均排列各个控件;
可以通过filllayout设置spacing(间距),marginWidth(左右边距),margin_height(上下边距),fillLayout不允许指定子空间大小。
Filllayout layout=new Filllayout();
shell.setLayout(layout);
shell.layout();

3RowLayout:排同一行或列,但运行为每个子控件指定宽度和高度,若不指定则采用偏好值,若一行排不下会自动换行,行的宽度取所有容器高度的最大值。
通过RowData为各个控件指定尺寸:
shell.setLayout(new RowData());
final RowData data=new RowData();
data.height=9;
data.width=9;
button.setLayoutData(data)
shell.layout();
RowLayout的几个属性:fill(是否将每一行中控件高度设为一样),justify(是否将所有控件间距设为一致),wrap(是否将超出一行的控件自动换行);pack(是否使用自定义的控件尺寸,否则所有控件设置为同样的宽度和高度)

4 GridLayout:将容器分为网格,其numColumns指定网格列数。通过GridData为每个控件指定样式。
horizontalAlligment:SWT.Begining/center/end/fill
verticalAligment:top/center/button/fill
grabExcessHorizonalSpace:是否占用水平方向剩余宽度
grabExcessVerticalSpace:是否占用竖直方向剩余宽度
horizonspan:水平跨列数
verticalspan:竖直跨行数
不能通过setBounds设置控件尺寸,但可以控股widthHint,heightHint自定义控件尺寸

5 Formlayout:采用相对位置,必须为每个控件指定一个ForData,并设置其top\button\left\right属性
formdata=new FormData();
formdata.left=new FormAttachment(50);//父窗口的50%处
formdata.left=new FormAttachment(button,60,SWT.RIGHT);//button的右边界,偏移60像素
当不是以父容器为参考时,不能设置比例,必须指定偏移量

6 StackLayout:管理很多子控件,但同时只有一个能显示,通过topControl制定哪个显示




你可能感兴趣的:(layout)