我想创建一个弹出窗口(作为对话框或其他类似组件实现),我应该能够在多个页面或表单中重复使用。我希望对话框能够向"打开器"返回一个值。
我在想,即在显示表格(通过 RPC 获得)的对话框中。该对话框可以在几个不同的页面中使用。当用户选择一行时,对象将"传递回页面"(例如,对其调用方法),因此它可以将其写入表单域,或对其执行任何操作。被调用者对 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
}
}