2014-03-04 41 views
1

我的程序將打開一個對話框(在給定的外殼):如何關閉給定SWT shell的所有打開的對話框?

new FileDialog(shell).open(); 

我的問題是:我如何(在我的程序的其他部分)接近給定 外殼的所有打開的對話框?

private void closeDialogs(Shell shell) { 
    // how to close open dialogs? 
} 

下面是最小的測試用例,一個按鈕打開對話框。另一個按鈕 關閉當前shell的所有打開的對話框。

enter image description here

public static void main(final String[] args) { 
    final Display display = new Display(); 

    final Shell shell = new Shell(display); 
    shell.setText("Testcase"); 
    shell.setLayout(new FillLayout()); 

    final Button button = new Button(shell, SWT.PUSH); 
    button.setText("Open Dialog"); 
    button.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(final SelectionEvent e) { 
      new NonModalDialog(shell).open(); 
     } 
    }); 

    Button button2 = new Button(shell, SWT.PUSH); 
    button2.setText("Close open dialogs"); 
    button2.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      // How to close all open dialogs of the given shell? 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
} 

回答

1

你必須收集對話框在列表中,你打開它們。

單擊「關閉」按鈕時,瀏覽列表並關閉對話框。

注意:當任何對話框爲模態時,這不起作用。模態對話框將接管事件循環並忽略任何不針對其自身的事件,因此單擊該按鈕將不可能。

+0

謝謝,非工作的關閉按鈕是沒有問題的,我沒有一個按鈕,並把它放在那裏只是爲了問(更簡單)的問題。 你確定我必須手動記住對話框嗎? –

+1

我不確定,但我不知道任何其他方式。您可以按照Baz的建議迭代所有的shell,但是沒有簡單的方法來確定Shell是否正在顯示對話框或正常窗口。你可以做的是查看Dialog的源代碼,你會發現它們沒有被添加到任何可以查看它們的列表中。所以你必須自己做。 –

相關問題