2

複数のページまたはフォームで再利用できるポップアップ (DialogBox または他の同様のコンポーネントとして実装) を作成したいと考えています。DialogBox が「オープナー」に値を返せるようにしたい。

つまり、テーブルを表示するDialogBox(RPC経由で取得)について考えています。その DialogBox は、いくつかの異なるページで使用できます。ユーザーが行を選択すると、オブジェクトが「ページに戻され」(たとえば、そのオブジェクトのメソッドを呼び出す) ため、フォーム フィールドに書き込むことができます。呼び出された側は、DialogBox 内のロジックについて何も知らず、返される型を処理する方法しか知りません。

私がやろうとしていることの良い例は、java.util.Date を返す DatePicker です。

似たようなことをしたことがありますか?私はあなたの助けに感謝します。ありがとう!デビッド

4

1 に答える 1

8

とても簡単です。最初に、あなたを開くすべてのページによって実装されるインターフェイスを作成する必要がありますDialogBox

public interface DialogBoxOpener {
    void dialogBoxValidated (Date selectedDate);
    void dialogBoxCancelled ();
}

次に、を作成し、 as パラメータをメソッドにDialogBox取ります。DialogBoxOpenershowDialogBox

public class MyDialogBox extends DialogBox {
    private DialogBoxOpener opener = null;
    private final Button cancelButton = new Button("Cancel");
    private final Button validButton = new Button("Ok");
    private final DateBox myDateBox = new DateBox();

    public MyDialogBox () {
            cancelButton.addClickHandler(new ClickHandler () {
                    @Override
                    public void onClick(final ClickEvent event) {
                            hide();
                            if (opener!=null)
                                    opener.dialogBoxCancelled();
                    }
            });

            validButton.addClickHandler(new ClickHandler () {
                    @Override
                    public void onClick(final ClickEvent event) {
                            hide();
                            if (opener!=null)
                                    opener.dialogBoxValidated(myDateBox.getValue());
                    }
            });
            // TODO : create your DialogBox
    }

    public void showDialogBox (final DialogBoxOpener opener) {
            this.opener = opener;
            // Show the DialogBox
            center ();
    }
}

そして今、DialogBoxあなたのページからあなたを見せることができます:

public class MyPage implements DialogBoxOpener {
    private MyDialogBox myDialogBox = getMyDialogBox();

    private void openDialogBox () {
            myDialogBox.showDialogBox(this);
    }

    public void dialogBoxValidated (Date selectedDate) {
            // TODO : Do something with the date
    }

    public void  dialogBoxCancelled () {
            // TODO : Do something
    }
}
于 2012-11-27T10:00:16.667 に答える