GWT DialogBox将值返回"开启者"

Dav*_*vid 3 java gwt dialog communication callback

我想创建一个弹出窗口(实现为DialogBox或其他类似的组件),我应该能够在多个页面或表单中重用.我希望DialogBox能够将值返回给"开启者".

我在想一个显示一个表(通过RPC获得)的DialogBox.DialogBox可以在几个不同的页面中使用.当用户选择一行时,对象被"传递回页面"(例如,在其上调用方法),因此它可以将其写入表单字段,或者对其执行任何操作.被调用者对de DialogBox内部的逻辑一无所知,只知道如何处理返回类型.

我打算做的一个很好的例子可能是一个返回java.util.Date的DatePicker.

你做过类似的事吗?我感谢您的帮助.谢谢!大卫

Flo*_*yle 9

这真的很容易.您应首先创建一个界面,该界面将由您打开的所有页面实现DialogBox:

public interface DialogBoxOpener {
    void dialogBoxValidated (Date selectedDate);
    void dialogBoxCancelled ();
}
Run Code Online (Sandbox Code Playgroud)

然后,创建你的DialogBox,并DialogBoxOpener为你的showDialogBox方法取一个参数:

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 ();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以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
    }
}
Run Code Online (Sandbox Code Playgroud)