Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 将按钮添加到SimplePanel会导致错误_Gwt_Button_User Interface - Fatal编程技术网

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

Gwt 将按钮添加到SimplePanel会导致错误,gwt,button,user-interface,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() { publi

我正在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

然而,按钮是一个单一的小部件,所以我不知道问题是什么?如果不添加按钮,则不会出现问题

尝试使用
setWidget(按钮)而不是
添加(按钮)

查看
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()
以获取已添加的小部件


查看默认构造函数if
SimplePanel
class的源代码。它可能会帮助您理解
SimplePanel
如何将小部件封装在其中

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

super(DOM.createAnchor());
你不需要它


您可以简单地在代码中使用按钮,或者扩展按钮小部件。向SimplePanel添加按钮没有任何好处。

该代码片段似乎不正确,您有一个
ContentLinkModifierPanel
的构造函数,但该类称为
FooPanel
。那只是一个打字错误还是有什么遗漏?是一个打字错误,我会编辑它对我有用。没有错误。您是否在
FooPanel
类之外添加了任何内容?为什么要调用
super(DOM.createAnchor())?我刚刚创建了一个项目,并对其进行了测试,它的工作原理就像一个charmproby,您稍后会在代码中添加更多的小部件。查看它。@apanizo
add()
内部调用
setWidget()
。看看我的帖子,我知道。我刚刚介绍了实现的示例,即FocusPanel或ScrollPanel。这是关于一致性的。@apanizo再次
add()
内部调用
setWidget()
,因此调用
setWidget()
而不是
add()
将不会有什么区别。感谢这个错误实际上来自代码的后面一点根据OP的最后一条评论,没有问题。不过,在链接中添加一个按钮是没有意义的。是的,我同意你的看法。