2

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

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

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

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

4

1 回答 1

8

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

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

然后,创建您的DialogBox, 并将DialogBoxOpeneras 参数添加到您的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
    }
}
于 2012-11-27T10:00:16.667 回答