Στοιχεία ελέγχου Expandablecomposite και Section

Το στοιχείο 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, το στοιχείο ελέγχου θα αναφέρει το πλάτος στη συμπτυγμένη κατάσταση ώστε να χωράει μόνο στη γραμμή τίτλου (i.e. στην κατάσταση σύμπτυξης θα είναι όσο το δυνατόν πιο συμπτυγμένο οριζόντια). Τέλος, το στυλ CLIENT_INDENT θα δημιουργήσει εσοχή στον πελάτη για να γίνει στοίχιση με τον τίτλο (διαφορετικά, ο πελάτης θα στοιχιθεί με το στοιχείο ελέγχου εναλλαγής).

Το ίδιο το επεκτάσιμο σύνθετο στοιχείο ευθύνεται για την απόδοση του στοιχείου εναλλαγής και του τίτλου. Το στοιχείο ελέγχου επέκτασης ή σύμπτυξης ορίζεται ως πελάτης. Να σημειωθεί ότι ο πελάτης πρέπει να είναι ένα άμεσο θυγατρικό στοιχείο του επεκτάσιμου σύνθετου στοιχείου.

Το επεκτάσιμο σύνθετο στοιχείο ενεργοποιεί αντικείμενα ExpansionEvent όταν αλλάζει η κατάσταση επέκτασης. Χρειάζεται να προστεθεί μια λειτουργία ακρόασης επέκτασης στο στοιχείο ελέγχου για να γίνει επανεκκίνηση της φόρμας σε περίπτωση αλλαγής κατάστασης. Αυτό χρειάζεται γιατί η επέκταση προκαλεί αλλαγές στο μέγεθος του επεκτάσιμου σύνθετου στοιχείου, αλλά η αλλαγή δεν θα πραγματοποιηθεί μέχρι την επόμενη φορά που θα γίνει διάταξη του γονικού στοιχείου (γι'αυτό πρέπει να την προκαλέσουμε).

Η Section είναι μια υποκλάση του επεκτάσιμου σύνθετου στοιχείου που προσθέτει επιπλέον ικανότητες. Συνήθως χρησιμοποιείται για το διαχωρισμό μιας φόρμας σε έναν αριθμό ενοτήτων που διαθέτουν δικό τους τίτλο και προαιρετική περιγραφή. Όταν χρησιμοποιούνται τα στυλ Section.TITLE_BAR ή Section.SHORT_TITLE_BAR, τα διακριτικά γύρω από την περιοχή τίτλου βελτιώνουν ακόμη περισσότερο την ομαδοποίηση.

Αντίθετα με την κλάση ExpandableComposite, η κλάση Section χειρίζεται αυτόματα τις επανεκκινήσεις σε περίπτωση αλλαγών κατάστασης επέκτασης. Μια άλλη ενδιαφέρουσα χρήση της ειδοποίησης κατάστασης επεκτασης είναι η αργή δημιουργία του περιεχομένου ενότητας που καθυστερεί μέχρι να ολοκληρωθεί η επέκταση της ενότητας.