Elementy sterujące rozwijanego elementu złożonego i sekcji

Element sterujący ExpandableComposite działa podobnie do elementu sterującego Group, z tym że umożliwia zwijanie i rozwijanie fragmentu strony:

	ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(), 
					ExpandableComposite.TREE_NODE|
					ExpandableComposite.CLIENT_INDENT);
	ec.setText("Tytuł rozwijanego elementu złożonego");
	String ctext = "Długi tekst, który posłuży jako "+
	"treść rozwijanego elementu złożonego. "+
	"Rozwijany element złożony umożliwia ukrywanie i wyświetlanie tekstu "+
	"przez przełączanie.";
	Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
	ec.setClient(client);
	ec.addExpansionListener(new ExpansionAdapter() {
		public void expansionStateChanged(ExpansionEvent e) {
			form.reflow(true);
		}
	});

Element sterujący ExpandableComposite akceptuje wiele stylów określających jego wygląd i zachowanie. Styl TREE_NODE tworzy element sterujący przełącznika używany w widgecie drzewa do rozwijania i zwijania węzłów, a styl TWISTIE tworzy trójkątny przełącznik. Użycie stylu EXPANDED powoduje utworzenie elementu sterującego, który w początkowym stanie będzie rozwinięty. Jeśli zostanie użyty styl COMPACT, element sterujący zgłosi szerokość w stanie zwinięcia niezbędną do pomieszczenia tylko wiersza tytułu (zwinięty element sterujący będzie miał możliwie najmniejszą szerokość). Zastosowanie stylu CLIENT_INDENT powoduje utworzenie wcięcia wyrównującego klienta z tytułem (w przeciwnym razie klient zostanie wyrównany do elementu sterującego przełącznika).

Za wyświetlanie przełącznika i tytułu jest odpowiedzialny rozwijany element złożony. Element sterujący rozwijaniem i zwijaniem jest ustawiany jako klient. Klient musi być bezpośrednim elementem potomnym rozwijanego elementu złożonego.

Zmiana stanu rozwinięcia powoduje wyzwolenie obiektów ExpansionEvent przez rozwijany element złożony. Aby odświeżyć formularz w przypadku zmiany stanu rozwinięcia, do elementu sterującego należy dodać funkcję nasłuchiwania rozwijania. Jest to niezbędne, ponieważ rozwinięcie powoduje zmianę wielkości rozwijanego elementu złożonego, a ta zmiana nie jest wprowadzana do chwili kolejnego renderowania elementu nadrzędnego (dlatego należy wymusić to renderowanie).

Klasa Section jest podklasą rozwijanego elementu złożonego udostępniającą dodatkowe możliwości. Najczęściej stosuje się ją w celu podzielenia formularza na sekcje, z których każda ma swój tytuł i opcjonalny opis. Użycie stylu Section.TITLE_BAR lub Section.SHORT_TITLE_BAR powoduje dodanie dekoracji do obszaru tytułu, co dodatkowo wyróżnia grupy.

W odróżnieniu od klasy ExpandableComposite klasa Section obsługuje automatyczne odświeżanie w przypadku zmiany stanu rozwinięcia. Powiadomień o stanie rozwinięcia można również użyć do opóźnionego tworzenia treści sekcji, która jest wyświetlana dopiero po rozwinięciu sekcji.