Obslužné prvky ExpandableComposite a sekce

ExpandableComposite pracuje podobně jako obslužný prvek Group a má schopnost sbalení části stránky obslužným přepínačem:

	ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(), 
					ExpandableComposite.TREE_NODE|
					ExpandableComposite.CLIENT_INDENT);
	ec.setText("Název rozšiřitelného kompozitního prvku");
	String ctext = "Nyní vytvoříme delší text, abychom "+
	"jej mohli použít jako obsah rozšiřitelného kompozitního prvku. "+
	"Rozšiřitelný kompozitní prvek se používá k zobrazení nebo skrytí textu pomocí "+
	"obslužného přepínače";
	Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
	ec.setClient(client);
	ec.addExpansionListener(new ExpansionAdapter() {
		public void expansionStateChanged(ExpansionEvent e) {
			form.reflow(true);
		}
	});

Obslužný prvek ExpandableComposite akceptuje řadu stylů, které ovlivňují jeho vzhled a chování. Styl TREE_NODE vytvoří obslužný přepínač použitím ve stromovém prvku widget k rozbalování a sbalování uzlů, zatímco TWISTIE vytvoří trojúhelníkový přepínač. Při použití EXPANDED dojde k vytvoření obslužného prvku ve výchozím rozbaleném stavu. Při použití stylu COMPACT obslužný prvek poskytne šířku sbaleného stavu, která postačí pouze k umístění do titulního řádku (tj. je-li sbalený, bude ve vodorovném směru co nejmenší). Poslední styl CLIENT_INDENT provede odsazení klienta za účelem zarovnání podle titulku (v opačném případě bude klient zarovnán obslužným přepínačem).

Samotný rozšiřitelný kompozitní prvek odpovídá za vykreslení obslužného přepínače a názvu. Obslužný prvek, který má být rozbalen nebo sbalen, je nastaven jako klient. Povšimněte si požadavku, že klient musí být přímým podřízeným prvkem rozšiřitelného kompozitního prvku.

Rozšiřitelný kompozitní prvek spouští objekty ExpansionEvent při změně stavu rozbalení. Do obslužného prvku je zapotřebí přidat listener rozbalení za účelem obnovení stavu změny formuláře. Toto je zapotřebí, protože rozbalení způsobuje změny velikosti rozšiřitelného kompozitního prvku, avšak změna se neuplatňuje až do příštího vykreslení nadřazeného prvku (proto je musíme vynutit).

Section je podtřídou rozšiřitelného kompozitního prvku, která přidává přídavné schopnosti. V běžném případě se používá k segmentaci formuláře na určitý počet úseků se samostatnými titulky a volitelnými popisy. Při použití stylu Section.TITLE_BAR nebo Section.SHORT_TITLE_BAR seskupování ještě více zdůrazní obruba oblasti titulku.

Na rozdíl od ExpandableComposite prvek Section automaticky obsluhuje obnovení změny stavu rozbalení. Dalším zajímavým využitím upozornění na stav rozbalení je pomalé vytváření obsahu sekce, jež je odloženo až do momentu rozbalení sekce.