繁体   English   中英

GWT DialogBox将值返回“开启者”

[英]GWT DialogBox that returns values back to the “opener”

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

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

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

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

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

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

然后,创建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 ();
    }
}

现在,您可以从您的页面显示您的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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM