[英]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();
}
});
還有其他面板支持多個子面板,如FlowPanel
、 VerticalPanel
等。如果有像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.