1
我的程序將打開一個對話框(在給定的外殼):如何關閉給定SWT shell的所有打開的對話框?
new FileDialog(shell).open();
我的問題是:我如何(在我的程序的其他部分)接近給定 外殼的所有打開的對話框?
private void closeDialogs(Shell shell) {
// how to close open dialogs?
}
下面是最小的測試用例,一個按鈕打開對話框。另一個按鈕 關閉當前shell的所有打開的對話框。
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();
}
}
謝謝,非工作的關閉按鈕是沒有問題的,我沒有一個按鈕,並把它放在那裏只是爲了問(更簡單)的問題。 你確定我必須手動記住對話框嗎? –
我不確定,但我不知道任何其他方式。您可以按照Baz的建議迭代所有的shell,但是沒有簡單的方法來確定Shell是否正在顯示對話框或正常窗口。你可以做的是查看Dialog的源代碼,你會發現它們沒有被添加到任何可以查看它們的列表中。所以你必須自己做。 –