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

यह एक टेक्स्ट क्षेत्र के अंदर एक समूह बनाता है।एसडब्ल्यूटी/जेएफएएस: विजेट हटाएं

मैं बाद में पाठ को कैसे हटा सकता हूं (स्क्रीन से इसे हटा दें ताकि मैं इसे किसी और चीज़ से बदल सकूं)?

उत्तर

7

विजेट.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

आपको समूह से इसे हटाने/छिपाने के लिए comment.changeParent(newParent) या comment.setVisible(false) पर कॉल करना होगा। मुझे यकीन है कि comment.changeParent(null) काम करेगा लेकिन मैं इसे आज़मा दूंगा।

हम ऐसा इसलिए करते हैं क्योंकि एसडब्ल्यूटी Composite Pattern का उपयोग करता है।

+3

comment.changeParent (शून्य) वास्तव में SWT.ERROR_NULL_ARGUMENT बढ़ा है। .. – Thilo

2

एक अन्य विकल्प अंतर्निहित नियंत्रण के बीच स्विच करने के लिए एक StackLayout उपयोग करने के लिए है। यह आपको "विजेट डिस्पोजेड" त्रुटि में चलने से रोकता है।

0

group.getChildren()[0].dispose() पहले बच्चे को हटा देगा। आपको उस सटीक बच्चे को पहचानने का तरीका ढूंढना होगा जिसे आप हटाना चाहते हैं। यह आईडी की तुलना कर सकता है। आपको लगता है कि नियंत्रण पर setData/GetData का उपयोग करके ऐसा कर सकते हैं:

उदाहरण के लिए:

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

और उसके बाद:

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