SWT - MessageBox打开和关闭

时间:2012-09-11 18:10:14

标签: java swt jface

是否可以在用户不必点击按钮的情况下打开和关闭messagedialog?

当用户单击表单上的按钮时,该按钮的操作将转到服务器端并收集项目列表,需要几秒钟。我想要一种方法告诉用户该操作正在进行中。我在想一个带有一些文字的messagedialog。 。

打开消息

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

然后有些人如何关闭它 (像MessageDialog.close)?

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

1 个答案:

答案 0 :(得分:3)

起初看起来可能看起来很大,但我建议使用IProgressMonitor来显示您的任务进度。

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

Here是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的东西,可能适合你。看看......