簡體   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