Question

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

Cela crée un groupe avec une zone de texte à l'intérieur.

Comment puis-je supprimer le texte plus tard (le supprimer de l'écran pour que je puisse le remplacer par autre chose)?

Était-ce utile?

La solution

Utilisez 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();
  }
}

Autres conseils

Une autre option est d'utiliser un stackLayout pour basculer entre les sous-jacent contrôles. Cela vous empêche de courir dans un « widget est disposé à » erreur.

Vous devez soit appeler comment.changeParent(newParent) ou comment.setVisible(false) pour enlever / cacher du groupe. Je ne suis pas sûr si comment.changeParent(null) fonctionnerait, mais je lui donnerais qu'un essai.

Nous le faisons de cette façon parce que SWT utilise le Motif composite.

group.getChildren()[0].dispose() va supprimer le premier enfant. Vous devez trouver un moyen d'identifier l'enfant précise que vous souhaitez supprimer. Il pourrait comparera l'id. Vous pouvez le faire en utilisant le setData / getData sur ce contrôle:

Par exemple:

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

et

for (Control ctrl : group.getChildren()) {
 if (control.getData("ID").equals("commentEditBox")) {
   ctrl.dispose();
   break;
 }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top