向SimplePanel添加按钮会导致错误

时间:2014-05-08 12:51:18

标签: gwt button user-interface

我在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是一个小部件,所以我不确定是什么问题?如果我不添加按钮

,则不会出现此问题

3 个答案:

答案 0 :(得分:0)

查看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());
}

答案 1 :(得分:0)

删除此行:

super(DOM.createAnchor());

你不需要它。

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

答案 2 :(得分:-1)

尝试使用setWidget(button);代替add(button);