可展开的组合体和段控件

ExpandableComposite 的操作类似于 Group 控件,它能够将页面的某个部分折叠,即作为切换控件:

	ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(),
					ExpandableComposite.TREE_NODE|
					ExpandableComposite.CLIENT_INDENT);
	ec.setText("Expandable Composite title");
	String ctext = "We will now create a somewhat long text so that "+
	"we can use it as content for the expandable composite. "+
	"Expandable composite is used to hide or show the text using the "+
	"toggle control";
	Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
	ec.setClient(client);
	ec.addExpansionListener(new ExpansionAdapter() {
		public void expansionStateChanged(ExpansionEvent e) {
			form.reflow(true);
		}
	});

ExpandableComposite 控件接受许多影响其外观和行为的样式。样式 TREE_NODE 将创建在树窗口小部件中使用的切换控件,用于展开和折叠节点,而 TWISTIE 将创建小三角形样式的切换控件。使用 EXPANDED 将创建处于初始展开状态的控件。如果使用样式 COMPACT,则控件将仅报告折叠状态下在标题行中放得下的宽度(即,折叠后,它将尽可能地进行水平压缩)。最后,CLIENT_INDENT 将使客户机缩进以便与标题对齐(否则,客户机将与切换控件对齐)。

可展开组合体本身负责显示切换控件和标题。要展开或折叠的控件被设置为客户机。注意,客户机必须是可展开组合体的直接子代。

当展开状态更改时,可展开组合体将激活 ExpansionEvent 对象。需要对控件添加展开侦听器以便使表单在状态更改时回流。这是因为展开会导致可展开组合体的大小发生变化,但是,此更改只有在下次布置父代后才会生效(因此,我们需要强制使其生效)。

Section 是可展开组合体的子类,它添加了其它功能。它通常用来将表单分为许多段,每一段都有自已的标题和可选的描述。当使用了 Section.TITLE_BARSection.SHORT_TITLE_BAR 样式时,标题区周围的修饰将进一步增强分组效果。

ExpandableComposite 不同,Section 在展开状态更改时自动处理回流。展开状态通知有其它一些让人感兴趣的用法,即将段内容的创建延迟到段展开后进行。