2009-04-01 8 views
12
Group group = new Group(parent, SWT.NONE); 
StyledText comment = new StyledText(group, SWT.BORDER_DASH); 

Ceci crée un groupe avec une zone de texte à l'intérieur. Comment puis-je supprimer le texte plus tard (le retirer de l'écran pour que je puisse le remplacer par autre chose)?SWT/JFace: supprime les widgets

Répondre

7

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

Vous devez soit appeler comment.changeParent(newParent) ou comment.setVisible(false) pour le supprimer/masquer du groupe. Je ne suis pas sûr si comment.changeParent(null) fonctionnerait mais je donnerais cela un essai.

Nous le faisons de cette façon parce que SWT utilise le Composite Pattern.

+3

comment.changeParent (null) ne soulève en effet SWT.ERROR_NULL_ARGUMENT. .. – Thilo

2

Une autre option consiste à utiliser un StackLayout pour basculer entre les contrôles sous-jacents. Cela vous empêche de courir dans un "widget est disposé" erreur.

0

group.getChildren()[0].dispose() enlèvera le premier enfant. Vous devez trouver un moyen d'identifier l'enfant précis que vous voulez supprimer. Cela pourrait être comparer 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"); 

puis:

for (Control ctrl : group.getChildren()) { 
if (control.getData("ID").equals("commentEditBox")) { 
    ctrl.dispose(); 
    break; 
} 
} 
Questions connexes