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.