Kontroller för expanderbara kompositer och sektioner

ExpandableComposite fungerar ungefär på samma sätt som kontrollen Group med förmågan att komprimera en del av en sida, en växelkontroll:

	ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(), 
					ExpandableComposite.TREE_NODE|
					ExpandableComposite.CLIENT_INDENT);
	ec.setText("Titel på expanderbar komposit");
	String ctext = "Vi kommer nu att skapa en ganska lång text så att "+
	"vi kan använda den som innehåll för den expanderbara kompositen. "+
	"Expanderbar komposit används för att dölja eller visa texten med hjälp av "+
	"växelkontrollen";
	Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
	ec.setClient(client);
	ec.addExpansionListener(new ExpansionAdapter() {
		public void expansionStateChanged(ExpansionEvent e) {
			form.reflow(true);
		}
	});

Kontrollen ExpandableComposite accepterar ett antal utföranden som påverkar dess utseende och beteende. Utförandet TREE_NODE skapar den växelkontroll som används i en trädgränssnittskontroll för att expandera och komprimera noder, medan TWISTIE skapar en triangelliknande växelfunktion. Med hjälp av EXPANDED skapas kontrollen i det expanderade initialläget. Om utförandet COMPACT används, anpassas kontrollens rapporter i komprimerat läge till enbart titelraden (dvs. den komprimeras så mycket som möjligt horisontellt). CLIENT_INDENT drar in klienten för justering av titeln (annars justeras klienten via växelkontrollen).

Själva den expanderbara kompositen återger växelkontrollen och titeln. Kontrollen för expandering eller komprimering ställs in som en klient. Observera kravet att klienten är direkt underordnad den expanderbara kompositen.

Expanderbart komposit aktiverar ExpansionEvent-objekt när expanderingsläget ändras. En expanderingslyssnare måste läggas till i kontrollen för att formuläret ska uppdateras vid lägesändring. Det beror på att expandering orsakar ändringar i den expanderbara kompositens storlek, men ändringen träder inte i kraft förrän nästa gång överordnade läggs ut (vi måste sålunda tvinga den).

Sektion är en subklass hos den expanderbara kompositen som lägger till extra funktioner. Den används normalt för att dela in ett formulär i ett antal sektioner, vardera med egen titel och tilläggsbeskrivning. När utförandena Section.TITLE_BAR eller Section.SHORT_TITLE_BAR används, förbättras grupperingen ytterligare med dekoration runt titelområdet.

Till skillnad från ExpandableComposite hanteras uppdatering vid expanderingslägesändring automatiskt i Section. Andra intressanta användningsområden av avisering av expanderingsläget är lat skapande av sektionsinnehåll som fördröjs tills sektionen expanderas.