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

Điều này tạo ra một nhóm có vùng văn bản bên trong.SWT/JFace: xóa các tiện ích

Làm thế nào sau này tôi có thể xóa văn bản (xóa nó khỏi màn hình để tôi có thể thay thế nó bằng một thứ khác)?

Trả lời

7

Sử dụng 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

Bạn phải gọi comment.changeParent(newParent) hoặc comment.setVisible(false) để xóa/ẩn nó khỏi Nhóm. Tôi không chắc liệu comment.changeParent(null) có hoạt động hay không nhưng tôi sẽ thử.

Chúng tôi thực hiện theo cách này vì SWT sử dụng Composite Pattern.

+3

comment.changeParent (null) không thực sự nâng cao SWT.ERROR_NULL_ARGUMENT. .. – Thilo

2

Một tùy chọn khác là sử dụng StackLayout để chuyển đổi giữa các kiểm soát cơ bản. Điều này ngăn bạn chạy vào lỗi "tiện ích được xử lý".

0

group.getChildren()[0].dispose() sẽ xóa đứa trẻ đầu tiên. Bạn cần phải tìm cách xác định con chính xác bạn muốn xóa. Nó có thể so sánh id. Bạn có thể làm điều đó bằng cách sử dụng các SetData/getData về kiểm soát rằng:

Ví dụ:

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

và sau đó:

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