SWT Auf einem Tabb (FormPage) einzelnes Composite neu zeichnen

Ahuga

Aktives Mitglied
Hallo zusammen

Auf einem Tab (FormPage) habe ich ein Composite mit Daten.

Wenn sich die Daten ändern möchte ich nun (wenn möglich nur) das Composite neu zeichnen mit den aktuellen Daten.

Wie ist das grundsätzlich möglich?

Danke für Tipps.
 
Zuletzt bearbeitet:
Es haben sich nur Daten geändert? Dafür verwendet man Databinding oder Observer Pattern, das Composite zu zerstören und ein neues zu erstellen ist keine gute Idee (ausser wenn du andere Widgets brauchst)
 
Wenn die Anzahl der möglichen Widget Kombinationen begrenzt ist, ist StackLayout die bessere Alternative. Anstatt immer neue Widgets zu erzeugen schaltest du einfach zwischen verschiedenen Formularen um.
 
Habe nun ein StackLayout eingebaut.

Im Parent-Composite mit dem StackLayout wird das entsprechende Composite angezeigt (Anhang 1).

Es kann jedoch der Fall auftreten, wo das entsprechende Composite leer ist. Nun soll aber keine leere Fläche eingeblendet werden (Anhang 2), sondern die Fläche entsprechend kleiner sein.

Wie erreiche ich das?
 
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]
 

Zurück
Oben