我在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是一个小部件,所以我不确定是什么问题?如果我不添加按钮
,则不会出现此问题答案 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);