Gwt 将按钮添加到SimplePanel会导致错误
我正在GWT中执行以下操作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
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()
以获取已添加的小部件
查看默认构造函数ifSimplePanel
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,您稍后会在代码中添加更多的小部件。查看它。@apanizoadd()
内部调用setWidget()
。看看我的帖子,我知道。我刚刚介绍了实现的示例,即FocusPanel或ScrollPanel。这是关于一致性的。@apanizo再次add()
内部调用setWidget()
,因此调用setWidget()
而不是add()
将不会有什么区别。感谢这个错误实际上来自代码的后面一点根据OP的最后一条评论,没有问题。不过,在链接中添加一个按钮是没有意义的。是的,我同意你的看法。