Pregunta

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

Esto crea un grupo con un área de texto en su interior.

¿Cómo puedo eliminar el texto más adelante (quitarlo de la pantalla para que pueda reemplazarlo con otra cosa)?

¿Fue útil?

Solución

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

Otros consejos

Otra opción es utilizar un StackLayout para cambiar entre subyacente controles. Esto le impide correr en un error "Reproductor está dispuesto".

Hay que llamar a cualquiera comment.changeParent(newParent) o comment.setVisible(false) para eliminar / ocultar desde el Grupo. No estoy seguro de si funcionaría comment.changeParent(null) pero yo le daría que intentarlo.

Lo hacemos de esta manera porque SWT utiliza el patrón Composite .

group.getChildren()[0].dispose() se eliminará el primer hijo. Es necesario encontrar una manera de identificar al niño precisa que desea borrar. Se podría comparar el id. Puede hacerlo utilizando el setData / getData en que el control:

Por ejemplo:

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

y, a continuación:

for (Control ctrl : group.getChildren()) {
 if (control.getData("ID").equals("commentEditBox")) {
   ctrl.dispose();
   break;
 }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top