我对简单面板及其只有一个子部件的功能感到困惑。
下面将导致关于一个子部件的异常。弹出式怎么会违反一个子部件的规则?如果我创建一个内部类来扩展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();
}
});
有其他的面板支持多个孩子,如 FlowPanel
, VerticalPanel
等。如果有像 PopupPanel
只支持一个子代,只需将内容包裹到这些面板中即可。
GWT Showcase - DialogBox例如,使用一个 VerticalPanel
:
// Create a table to layout the content
VerticalPanel dialogContents = new VerticalPanel();
dialogContents.setSpacing(4);
dialogBox.setWidget(dialogContents);