繁体   English   中英

将按钮添加到SimplePanel会导致错误

[英]Adding button to SimplePanel results in error

我正在GWT中执行以下操作

public class FooPanel extends SimplePanel {
    private String url;

    public FooPanel () {
        super(DOM.createAnchor());
        Button button = new Button();
        button.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                foo();
            }
        });
        add(button);
    }
}

但是,当我运行代码时,出现以下错误

SimplePanel can only contain one child widget

但是Button是一个小部件,所以我不确定是什么问题? 如果我不添加按钮,则不会发生此问题

查看SimplePanel#add()源代码以分析此错误。

@Override
public void add(Widget w) {
    // Can't add() more than one widget to a SimplePanel.
    if (getWidget() != null) {
        throw new IllegalStateException("SimplePanel can only contain one child widget");
    }
    setWidget(w);
}

现在从源代码中可以很明显地看出, 您已经在SimplePanel添加了小部件

调用SimplePanel#getWidget()以获取已添加的小部件。


查看默认构造函数的源代码是否为SimplePanel类。 它可以帮助您了解SimplePanel如何将小部件封装在其中。

/**
 * Creates an empty panel that uses a DIV for its contents.
 */
public SimplePanel() {
    this(DOM.createDiv());
}

删除此行:

super(DOM.createAnchor());

不用了

您可以在代码中简单地使用Button,或扩展Button小部件。 将按钮添加到SimplePanel不会带来任何好处。

尝试使用setWidget(button); 而不是add(button);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM