Frage

Group group = new Group(parent, SWT.NONE);
StyledText comment = new StyledText(group, SWT.BORDER_DASH);

Dies erzeugt eine Gruppe mit einem Textbereich innen.

Wie kann ich löschen später den Text (entfernen Sie sie aus dem Bildschirm, so dass ich es mit etwas ersetzen kann sonst)?

War es hilfreich?

Lösung

Mit Widget.dispose.

public class DisposeDemo {
  private static void addControls(final Shell shell) {
    shell.setLayout(new GridLayout());
    Button button = new Button(shell, SWT.PUSH);
    button.setText("Click to remove all controls from shell");
    button.addSelectionListener(new SelectionListener() {
      @Override public void widgetDefaultSelected(SelectionEvent event) {}
      @Override public void widgetSelected(SelectionEvent event) {
        for (Control kid : shell.getChildren()) {
          kid.dispose();
        }
      }
    });
    for (int i = 0; i < 5; i++) {
      Label label = new Label(shell, SWT.NONE);
      label.setText("Hello, World!");
    }
    shell.pack();
  }

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    addControls(shell);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
}

Andere Tipps

Eine weitere Möglichkeit ist es, eine StackLayout zwischen zugrunde liegenden wechseln Kontrollen. Dies verhindert, dass Sie laufen in ein „Widget angeordnet“ Fehler.

Sie müssen entweder comment.changeParent(newParent) oder comment.setVisible(false) nennen es von der Gruppe zu entfernen / auszublenden. Ich bin nicht sicher, ob comment.changeParent(null) funktionieren würde, aber ich würde, dass ein Versuch.

Wir tun es auf diese Weise, weil SWT die Composite-Pattern verwendet.

group.getChildren()[0].dispose() wird das erste Kind entfernen. Sie müssen einen Weg finden, um die genaue Kind, das Sie löschen möchten, zu identifizieren. Es könnte die ID werden zu vergleichen. Sie können das tun, indem Sie die setData / getData auf, dass die Steuerung mit:

Zum Beispiel:

StyledText comment = new StyledText(group, SWT.BORDER_DASH);
comment.setData("ID","commentEditBox");

und dann:

for (Control ctrl : group.getChildren()) {
 if (control.getData("ID").equals("commentEditBox")) {
   ctrl.dispose();
   break;
 }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top