1

ユーザーがボタンをクリックしなくてもメッセージダイアログを開いたり閉じたりすることは可能ですか?

ユーザーがフォームのボタンをクリックすると、そのボタンからのアクションがサーバー側に移動し、アイテムのリストを収集します。これには数秒かかります。アクションが進行中であることをユーザーに知らせる方法が必要です。私はいくつかのテキストを含むメッセージダイアログを考えていました。。

メッセージを開きます

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

それでは、それをどれだけ閉じますか(のようなものMessageDialog.close)?

プログレスバーを見ましたが、それは本当に必要以上のものでした。

4

1 に答える 1

3

最初は大きなオーバーヘッドのように見えるかもしれませんがIProgressMonitor、タスクの進行状況を示す を使用することをお勧めします。

ユーザーは、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 に答える