Dav*_*vid 3 java gwt dialog communication callback
我想创建一个弹出窗口(实现为DialogBox或其他类似的组件),我应该能够在多个页面或表单中重用.我希望DialogBox能够将值返回给"开启者".
我在想一个显示一个表(通过RPC获得)的DialogBox.DialogBox可以在几个不同的页面中使用.当用户选择一行时,对象被"传递回页面"(例如,在其上调用方法),因此它可以将其写入表单字段,或者对其执行任何操作.被调用者对de DialogBox内部的逻辑一无所知,只知道如何处理返回类型.
我打算做的一个很好的例子可能是一个返回java.util.Date的DatePicker.
你做过类似的事吗?我感谢您的帮助.谢谢!大卫
这真的很容易.您应首先创建一个界面,该界面将由您打开的所有页面实现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)