通常需要给应用程序 GUI 的某些部分分配可变的屏幕空间。第 3 部分 介绍了如何用 TabFolder 实现此目标。而本文将介绍使用 SashForm 的替代方法。
SashForm 显示多个(通常是两个)控件时,在控件间可以有分隔 Sash(框格)。可移动此框格,在控件间分隔屏幕空间。请注意在多数情况下,SashFrom 中的控件是 Composite。要获得非常好的使用性,Composite 应当有边框,以便让 Sash 看起来更清楚。SashForm 可以嵌套在其他 SashForm 中(看起来工作得很好),从而形成相当复杂的分隔空间的方法。SashForm 在 custom 包中。
SashForm 必须定义成以下两种互斥的样式之一:
HORIZONTAL —— 水平方向排列元素
VERTICAL —— 垂直方向排列元素
它们还支持 SMOOTH 样式,在使用此样式时,框格的移动更流畅。
以下清单显示了创建 SashForm 的方法。
清单 7. 创建 SashForm 的方法
1 protected SashForm createSashForm(Composite parent, int style) {
2 SashForm sf = new SashForm(parent, style);
3 return sf;
4 }
5 protected SashForm createVSashForm(Composite parent) {
6 return createSashForm(parent, SWT.VERTICAL);
7 }
8 protected SashForm createHSashForm(Composite parent) {
9 return createSashForm(parent, SWT.HORIZONTAL);
10 }
11
2 SashForm sf = new SashForm(parent, style);
3 return sf;
4 }
5 protected SashForm createVSashForm(Composite parent) {
6 return createSashForm(parent, SWT.VERTICAL);
7 }
8 protected SashForm createHSashForm(Composite parent) {
9 return createSashForm(parent, SWT.HORIZONTAL);
10 }
11
图 3 和图 4 显示了 SashForm 的实际效果。图 3 展示的是外部的 SashForm 移动到右侧。图 4 则展示调整内部 SashForm 以使中央 Composite 变得更大。把这两个图与 图 1 对比,可以看出 Sash 预先配置的位置是,外部 Sash 20%,内部 Sash 33%。
图 3. SashForm 示例 1
图 4. SashForm 示例 2