ExpandableComposite funciona de modo semelhante ao controlo
Group com a capacidade de contrair uma parte de uma página como
controlo de comutação:
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);
}
});
O controlo ExpandableComposite aceita vários estilos que afectam a sua aparência e o seu comportamento.
O estilo TREE_NODE cria o controlo de comutação utilizado num
widget em árvore para expandir e contrair nós, ao passo que
TWISTIE cria uma comutação ao estilo triângulo. EXPANDED cria um controlo no estado expandido inicial. Se for usado o estilo COMPACT, o controlo emprega largura no estado contraído suficiente para encaixar na linha de título somente (ou seja, quando contraído será tão compacto horizontalmente quanto possível). Por fim, CLIENT_INDENT faz a indentação do cliente para alinhar com o título (caso contrário, o cliente ficará alinhado com o controlo de comutação).
O próprio compósito expansível é responsável pela apresentação do controlo de comutação e do título. O controlo para expandir ou contrair está definido como cliente. Repare no requisito de o cliente ser descendente directo do compósito expansível.
O compósito expansível desencadeia objectos ExpansionEvent quando o estado de extensão se altera. É necessário adicionar um ouvinte de extensão ao controlo para reapresentar o formulário na alteração de estado. Isto porque a extensão causa alterações no tamanho do compósito expansível, mas a alteração só entra em vigor na ocasião seguinte em que o ascendente seja esquematizado (ou seja, temos de a forçar).
Section é uma subclasse do compósito expansível que adiciona mais capacidades. Regra geral, utiliza-se para particionar um formulário em várias secções, cada qual com título próprio e descrição opcional. Quando se o usa o estilo
Section.TITLE_BAR ou Section.SHORT_TITLE_BAR, a decoração em torno da área de título aperfeiçoa mais o agrupamento.
Ao invés de ExpandableComposite, Section trata automaticamente reapresentações na alteração do estado de extensão. Outras utilizações interessantes da notificação de estado de extensão são a criação ociosa do conteúdo da secção, a qual é diferida até a secção ser expandida.