可展開的複合項和 Section 控制項

ExpandableComposite 的作用類似 Group 控制項, 能夠透過切換控制項來收合部分頁面:

	ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(), 
					ExpandableComposite.TREE_NODE|
					ExpandableComposite.CLIENT_INDENT);
	ec.setText("Expandable Composite title");
	String ctext = "我們現在要建立有點長的文字,使得"+
	"我們能夠使用它作為可展開之複合項的內容。"+
	"可展開的複合項可以利用"+
	"切換控制項,來隱藏或顯示文字";
	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 會在展開狀態變更時, 自動處理重排的動作。展開狀態通知之其他有趣的用法是, 直到區段被展開之後,才被動建立延遲的 Section 內容。