【问题标题】:GWT DialogBox never shows - helpGWT 对话框从不显示 - 帮助
【发布时间】:2011-07-12 18:10:29
【问题描述】:

我写了一个测试复合+入口点,只是为了显示我的测试对话框。 结构是……

  • A) 入口点包含复合
  • B) Composite 包含按钮(在 ScrollPanel 中)以显示 A 类
  • C) 类扩展 DialogBox

事件监听器代码类似于...

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

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

感谢任何有用的评论

【问题讨论】:

    标签: java gwt


    【解决方案1】:

    首先尝试在您的 Button 的 clickHandler 中添加 Window.alert("Handler called!"); 以查看实际调用的处理程序。如果您看到一个 javascript 警报对话框(调用了处理程序),则表示问题出在您的 CustomDialogBox 中。确保通过setWidget(Widget w) 之前 设置对话框的内容,然后调用show() 使其可见,否则不会显示。

    如果没有警报(从不调用处理程序),则表示问题出在您的复合材料中。在不使用小部件的情况下直接将一些元素添加到 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,因此您无需同时调用两者

    【讨论】:

    • sn-p 对你有用吗?我的意思是它测试了吗?因为我试图扩展 DialogBox 但它从来没有为我工作过 :( 它会是一个模态的吗?
    • 是的,我的答案中的代码有效。如果你希望它是模态的,你只需要在构造函数中添加 setModal(true)
    • 好的。谢谢你。我会尽快尝试并报告我的结果
    【解决方案2】:

    一个可能的原因是您没有向 RootPanel 添加任何内容,在这种情况下,您正在内存中创建 DOM 结构,但没有将其附加到任何内容:

    RootPanel.get().add(b);
    

    另一个原因是您似乎没有在对话框中调用 .show 方法:

    new MyDialog().show();
    

    您所描述的行为可能有多种原因,请发布完整示例以获得更有针对性的答案。

    【讨论】:

    • 另一件事是我使用 show 方法,但使用 DialogBox aDialog=new A(); aDialog.center(); aDialog.show();对吗?
    • 并且按钮在 ScrollPanel 小部件中... ScrollPanel 会导致问题吗?
    • 嗯...什么 b 作为 RootPanel.get().add(b);是什么意思?
    • b 只是一个随机选择的小部件名称。关键是您需要将小部件添加到根面板。
    • 我已经添加了它,但它没有帮助:(还有什么可能导致问题?
    【解决方案3】:

    我想我之前也遇到过类似的问题,我所做的是在 center() 之前调用 show()。会有帮助吗?

    【讨论】:

    • Emm... 不,它没有帮助。我尝试使用 extends DialogBox 所以也许这就是问题所在?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多