我写了一个测试复合+入口点,只是为了显示我的测试DialogBox。 结构是......
事件监听器代码如...
button.addClickHandler(new ClickHandler(){public void onClick(ClickEvent事件){ DialogBox aDialog = new A(); aDialog.center(); aDialog.show(); }});
没有显示doalogBox :(我做错了什么?
赞赏任何有用的评论
答案 0 :(得分:1)
首先尝试在Button的clickHandler中添加Window.alert("Handler called!");
,以查看实际调用的处理程序。如果您看到一个javascript警告对话框(调用处理程序),则表示问题出在CustomDialogBox中。确保您按setWidget(Widget w)
设置对话框的内容,然后调用show()
使其显示,否则无法显示。
如果没有警报(从不调用处理程序),则意味着问题出在组合中。这可能是在不使用小部件的情况下直接向DOM添加一些元素的问题,它会破坏gwt甚至机制(可以解释为什么它在向根面板添加按钮时有效)。除此之外,没有看到一些代码就很难分辨。
最后,我会发布一些有效的代码,以防你决定从这里开始工作,看看它失败了。这是一个有效的代码:
First Extend DialogBox(别忘了设置它的小部件):
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,因此您不需要同时调用
答案 1 :(得分:0)
一个可能的原因是你没有向RootPanel添加任何东西,在这种情况下,你在内存中创建DOM结构,但你没有将它附加到任何东西:
RootPanel.get().add(b);
另一个原因是你似乎没有在对话框上调用.show方法:
new MyDialog().show();
您所描述的行为可能有多种原因,请发布完整示例以获得更具针对性的答案。
答案 2 :(得分:0)
我认为之前我遇到过类似的问题,我所做的是在center()之前调用show()。那会有帮助吗?