1

是否可以在用户无需单击按钮的情况下打开和关闭消息对话框?

当用户单击我的表单上的按钮时,该按钮的操作会转到服务器端并收集项目列表,这需要几秒钟。我想要一种方法来告诉用户该操作正在进行中。我在想一个带有一些文本的消息对话框。.

打开消息

MessageDialog.openInformation(shell, "Information", "Getting List From Server"); 

然后一些如何关闭它(类似MessageDialog.close)?

我查看了一个进度条,但这比我真正需要的要多。

4

1 回答 1

3

一开始它可能看起来像一个很大的开销,但我建议使用IProgressMonitor显示任务进度的 an 。

当他/她看到一个进度条时,用户会知道发生了什么,而不是一个看起来像 gui 被冻结的对话框。

是 Eclipse 关于如何正确使用进度监视器的文章。

如果您真的想实现您的想法(我不建议这样做),您可以尝试以下方法:

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    BazMessageDialog dialog = new BazMessageDialog(shell, "Information", null, "Getting List From Server", MessageDialog.INFORMATION, new String[]{"OK", "Cancel"}, 0);
    dialog.open();

    /* Do your stuff */

    dialog.reallyClose();

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

public static class BazMessageDialog extends MessageDialog
{

    public BazMessageDialog(Shell parentShell, String dialogTitle,
            Image dialogTitleImage, String dialogMessage,
            int dialogImageType, String[] dialogButtonLabels,
            int defaultIndex) {
        super(parentShell, dialogTitle, dialogTitleImage, dialogMessage,
                dialogImageType, dialogButtonLabels, defaultIndex);
        setBlockOnOpen(false);
    }

    public void reallyClose()
    {
        cancelPressed();
    }

}

但是,这不会阻止您剩余的 gui,因此用户将能够同时使用它。

编辑

刚刚发现,Opal有一个叫做InfiniteProgressPanel的东西,它可能适合你。看一看...

于 2012-09-11T18:16:02.030 回答