[英]GWT DialogBox never shows - help
我写了一个测试复合+入口点,只是为了显示我的测试对话框。 结构是...
事件监听器代码就像...
button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { DialogBox aDialog=new A(); aDialog.center(); aDialog.show(); } });
没有显示任何doalogBox:(我做错了什么?
任何有用的评论表示赞赏
首先尝试添加Window.alert("Handler called;");
在您的 Button 的 clickHandler 中查看处理程序实际上正在被调用。 如果您看到 javascript 警报对话框(调用了处理程序),则表示问题出在您的 CustomDialogBox 中。 确保在调用show()
)之前通过setWidget(Widget w)
设置对话框的内容以使其可见,否则不会显示。
如果没有警报(从不调用处理程序),则意味着问题出在您的复合材料中。 在不使用小部件的情况下直接将一些元素添加到 DOM 可能是一个问题,它会破坏 gwt 偶数机制(将解释为什么当您将按钮添加到根面板时它会起作用)。 除此之外,如果不看一些代码就很难判断。
最后,我将发布一些工作代码,以防你决定从这里开始,看看它在哪里失败。 这是一个有效的代码:
首先扩展对话框(不要忘记设置它的小部件):
public class CustomDialog extends DialogBox {
public CustomDialog() {
setWidget(new Label("Hello!"));
}
}
然后构建一个复合:
public CustomComposite() {
Button b = new Button("Pop it up");
b.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new CustomDialog().show();
}
});
initWidget(b);
}
最后 onModuleLoad:
public void onModuleLoad() {
CustomComposite c = new CustomComposite();
RootPanel.get().add(c);
}
顺便说一句: center()
确实将弹出窗口居中,然后是show()
s,因此您不需要同时调用两者
一个可能的原因是您没有向 RootPanel 添加任何内容,在这种情况下,您正在 memory 中创建 DOM 结构,但您没有将其附加到任何内容:
RootPanel.get().add(b);
另一个原因是您似乎没有在对话框上调用 .show 方法:
new MyDialog().show();
您描述的行为可能有多种原因,请发布完整示例以获得更有针对性的答案。
我想我以前遇到过类似的问题,我所做的是在 center() 之前调用 show()。 那会有帮助吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.