GWT DialogBox从不显示 - 帮助

时间:2011-07-12 18:10:29

标签: java gwt

我写了一个测试复合+入口点,只是为了显示我的测试DialogBox。 结构是......

  • A)EntryPoint包含Composite
  • B)Composite包含Button(在ScrollPanel中)以显示A类
  • C)一个类扩展了DialogBox

事件监听器代码如...

  

button.addClickHandler(new ClickHandler(){public void   onClick(ClickEvent事件){                 DialogBox aDialog = new A();                 aDialog.center(); aDialog.show(); }});

没有显示doalogBox :(我做错了什么?

赞赏任何有用的评论

3 个答案:

答案 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()。那会有帮助吗?