如何关闭给定SWT shell的所有打开对话框?

时间:2014-03-04 09:32:25

标签: java 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)

打开它们时,您必须在列表中收集对话框。

单击“关闭”按钮时,浏览列表并关闭对话框。

注意:当任何对话框是模态时,这将不起作用。模态对话框将接管事件循环并忽略任何不针对自身的事件,因此单击按钮将是不可能的。