簡體   English   中英

GWT SimplePanel 在使用彈出窗口時只能包含一個子小部件

[英]GWT SimplePanel can only contain one child widget when working with popup

我對簡單的面板及其唯一的一個子小部件功能感到困惑。

以下將導致有關單子小部件的異常。 彈出窗口如何違反單子小部件規則? 如果我創建一個內部 class 擴展 PopupPanel,則不再有一個小部件異常。

謝謝

Class DashBoardPanel extends SimplePanel{
private PopupPanel popup=new PopupPanel(true);
...
public void initDashBoardPanel(ArrayList<EventDTO> _evtAry) 
{
    Iterator<EventDTO> it=_evtAry.iterator();
    int row=0; int col=0;
    while(it.hasNext()) 
    {
        final EventDTO evt=it.next();
        //every 3 column, next row
        if(col==3)
        {
            col=0;
            row=row+1;
        }
        Image evtPic=new Image(GWT.getHostPageBaseURL()+"photoServlet?photoName="+evt.getEvtPicName());
        evtPic.setSize("200px", "200px");
        Button editBtn=new Button("Edit");
        FlexTable evtTab=new FlexTable();
        evtTab.setWidget(0, 0, evtPic);
        evtTab.setWidget(1, 0, editBtn);
        this.evtFlexTable.setWidget(row, col, evtTab);
        editBtn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                FlexTable table =new FlexTable();
                table.setWidget(0, 0, new Label(evt.getEvtName()));
                popup.add(table);
                popup.center();
            }
        });
        col=col+1;
    }
    frame.add(new Label("DASH BOARD"));
    frame.add(this.evtFlexTable);
    this.btnPanel.setWidget(0, 0, this.btn1);
    this.btnPanel.setWidget(0, 1, this.btn2);
    frame.add(this.btnPanel);
    this.add(frame);
}

但是如果我創建一個內部 class 擴展 Popup,則沒有 SimplePanel 只有一個子小部件異常。

public class DashBoardPanel extends SimplePanel{
private EvtEditPopup evtEditPopup=new EvtEditPopup();
//Replaced the popup by this
public class EvtEditPopup extends PopupPanel
{
    FlexTable table =new FlexTable();
    String evtName="Event";
    //table.setWidget(0, 0, new Label(evt.getEvtName()));
    public EvtEditPopup()
    {
        super(true);
        table.setWidget(0, 0, new Label(evtName));
        this.add(table);
    }
    public void setEvtName(String _evtName)
    {
        this.evtName=_evtName;
        table.setWidget(0, 0, new Label(evtName));
    }
    public String getEvtName()
    {
        return this.evtName;
    }
}
public void initDashBoardPanel(ArrayList<EventDTO> _evtAry) 
......
editBtn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                DashBoardPanel.this.evtEditPopup.setEvtName(evt.getEvtName());
                DashBoardPanel.this.evtEditPopup.center();
            }
        });

還有其他面板支持多個子面板,如FlowPanelVerticalPanel等。如果有像PopupPanel這樣的小部件只支持一個孩子,只需將內容包裝到其中一個面板中。

GWT 展示 • DialogBox ,使用VerticalPanel的示例:

// Create a table to layout the content
VerticalPanel dialogContents = new VerticalPanel();
dialogContents.setSpacing(4);
dialogBox.setWidget(dialogContents);

此外,您應該使用Composite自定義小部件指南)遵循inheritance規則的組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM