Als Ausgangslage dient ein leeres Composite (Anhang oben rechts). Je nach Wert werden dann mehr oder weniger weniger gefülltes Composite eingeblendet (Anhang oben links).
Das Umschalten funktioniert grundsätzlich.
Auch beim leeren Composite wird eine Fläche "reserviert"/angezeigt, welche dem grösstmöglichen einzufüllenden Composite entspricht.
Kann das umgangen werden, so dass die Fläche angezeigt wird, welche auch gebraucht wird?
[Java]
// Parent: in diesem Composite werden die Inhalte ausgetauscht
compositeAdditionalParent = new Composite(compositeInnerGroupDeliveryPaymentConditions, SWT.NONE);
GridData gridDataCA = new GridData();
gridDataCA.horizontalSpan = 2;
compositeAdditionalParent.setLayoutData(gridDataCA);
stackLayout = new StackLayout();
compositeAdditionalParent.setLayout(stackLayout);
// Kids: aus diesen Composites wird eines ausgewählt und im parent angezeigt
compositeStackEmpty = new Composite(compositeAdditionalParent, SWT.
GridData gridDataCSE = new GridData(0,
compositeStackEmpty.setLayoutData(gridDataCSE);
compositeStackEmpty.setBackground(RED);
compositeStackDDU = new Composite(compositeAdditionalParent, SWT.NONE);
compositeStackDDU.setLayout(new GridLayout(2, false));
Label labelPlaceOfDestination = new Label(compositeStackDDU, SWT.NONE);
labelPlaceOfDestination.setText("Place of destination *");
textPlaceOfDestination = new Text(compositeStackDDU, SWT.BORDER);
textPlaceOfDestination.setBackground(WHITE);
textPlaceOfDestination.setLayoutData(new GridData(TEXT_WIDTH, SWT.DEFAULT));
new Label(compositeStackDDU, SWT.NONE).setText("Customs Housebroker *");
textCustomHousebroker = new Text(compositeStackDDU, SWT.BORDER);
textCustomHousebroker.setBackground(WHITE);
textCustomHousebroker.setLayoutData(new GridData(TEXT_WIDTH, SWT.DEFAULT));
// initial
stackLayout.topControl = compositeStackEmpty;
compositeMain.
groupWarrantyPerformanceGuarantee.layout();
[/Java]
So schalte ich um im Eventhandling:
[Java]
...
else if (comboTermsOfDelivery.getText().equals("DDU") || comboTermsOfDelivery.getText().equals("DDP")) {
nextComposite = compositeStackDDU;
}
stackLayout.topControl = nextComposite;
compositeAdditionalParent.layout();
[/code]