0

我在打开结果对话框的基本对话框中有一个按钮。

private void showPlotResultsDialog() {
  resultsDialog = new AplotPlotResultsDialog(getShell());
  resultsDialog.setBlockOnOpen(true);
  resultsDialog.open();

}

允许用户在工作时将结果对话框保持打开状态。但我最近注意到,用户可以根据需要多次单击“打开结果对话框”。
每次单击都会打开一个新的结果对话框。可以打开几个相同的对话框,但表中的数据不同。

  1. 当他们单击按钮时,是否可以检查对话框是否已经打开?如果一个已经打开,弹出一条消息,说它已经打开并阻止打开一个新的。
4

2 回答 2

1

当他们单击按钮时,是否可以检查对话框是否已经打开?

当然。只需检查null您的方法即可。如果实例不为空,则已打开一个对话框。

如果一个已经打开,弹出一条消息,说它已经打开并阻止打开一个新的

最好更新对话框并将焦点设置在对话框上。节省了用户必须关闭弹出消息、关闭对话框和打开相同对话框的操作。

于 2013-01-24T19:56:16.730 回答
1

另一种可能性是使用以下方法为您的 shell(应该只打开一次)提供一个唯一的 ID:

shell.setData("yourID");

如果您有SelectionListener(例如),您可以检查Shell带有 IDyourID的是否已经打开。

行动:

  • 如果在Shell某处打开:激活外壳(设置焦点)
  • 如果Shell没有打开:打开外壳

示例(见评论):

yourButton.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {

        // Loop through all active shells and check if 
        // the shell is already open
        Shell[] shells = Display.getCurrent().getShells();

        for(Shell shell : shells) {
            String data = (String) shell.getData();

            // only activate the shell and return
            if(data != null && data.equals("yourID")) {
                shell.setFocus();
                return;
            }
        }

        // open the shell and the dialog
        Shell shell = new Shell(Display.getCurrent());
        shell.setData("yourID");
        YourDialog yourDialog = new YourDialog(shell);
        yourDialog.open();
    }
}); 
于 2013-01-25T13:41:24.023 回答