【问题标题】:GWT DialogBox that returns values back to the "opener"将值返回给“开启者”的 GWT 对话框
【发布时间】:2012-11-14 21:16:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java gwt callback communication dialog


    【解决方案1】:

    这真的很容易。您应该首先创建一个接口,该接口将由打开您的所有页面实现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
        }
    }
    

    【讨论】:

    • 谢谢!这是我一直在寻找的。据我了解,关键事实是实现“opener”的方式,将“this”引用传递给 DialogBox,因此它可以调用在调用者上实现的特定方法。
    猜你喜欢
    • 2011-01-05
    • 2013-10-18
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2012-05-22
    相关资源
    最近更新 更多