当使用弹出式窗口时,GWT SimplePanel只能包含一个子部件。

问题描述 投票:0回答:1

我对简单面板及其只有一个子部件的功能感到困惑。

下面将导致关于一个子部件的异常。弹出式怎么会违反一个子部件的规则?如果我创建一个内部类来扩展PopupPanel,那么就不会再出现一个widget异常了。

谢谢你

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);
}

但如果我创建一个内部类扩展为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();
            }
        });
java gwt
1个回答
3
投票

有其他的面板支持多个孩子,如 FlowPanel, VerticalPanel等。如果有像 PopupPanel 只支持一个子代,只需将内容包裹到这些面板中即可。

GWT Showcase - DialogBox例如,使用一个 VerticalPanel:

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

另外,你应该遵循 重继承 规则使用 Composite (自定义小部件指南).

© www.soinside.com 2019 - 2024. All rights reserved.