我从一个EntryPoint类加载一个定制的构建westPanel。从这个WestPanel中,我想替换我的EntryPoint类中的DockLayoutPanel的中心。
下面是我的EntryPoint类:
public class MainEntryPoint implements EntryPoint {
private VerticalPanel mainPanel = new VerticalPanel();
private DockLayoutPanel dockLayoutPanel = new DockLayoutPanel(Unit.EM);
private NorthMenu northMenu = new NorthMenu();
private VerticalPanel mainPanel = new VerticalPanel();
//other panels
@Override
public void onModuleLoad() {
dockLayoutPanel.addNorth(northMenu, 40);
dockLayoutPanel.add(mainPanel);
//add other panels
RootLayoutPanel panel = RootLayoutPanel.get();
panel.add(dockLayoutPanel);
}
}WestPanel应该用MyOtherPanel替换DockLayout的mainPanel:
public class WestMenu extends Composite {
private StackLayoutPanel stackLayoutPanel = new StackLayoutPanel(Unit.EM);
public WestMenu(){
Tree configuration = new Tree();
configuration.addSelectionHandler( new SelectionHandler(){
@Override
public void onSelection(SelectionEvent event) {
MyOtherPanel builderPanel = new MyOtherPanel();
RootLayoutPanel panel = RootLayoutPanel.get();
DockLayoutPanel dlp = (DockLayoutPanel)panel.getWidget(0);
dlp.add(builderPanel);
}
});
//other init configurations
initWidget(stackLayoutPanel);
}
} 我一直收到一个异常,说我不能替换它。更换/更换DockLayoutPanel中央面板的最佳方式是什么?
谢谢。
发布于 2011-10-06 18:12:06
您需要显式删除中心(请参阅DockLayoutPanel中受保护的insert方法的javadoc ):
dlp.remove(currentCenterPanel);但这对开发人员不是很友好,因为您需要跟踪中心小部件,并始终确保在添加之前调用remove。我不知道他们为什么要这样做。
另一种解决方案是通过setWidget简单地将SimpleLayoutPanel作为中心小部件,并在此面板上设置您自己的中心小部件。这样你就不用做删除操作了。
后一种技术还可以通过将ActivityManager设置为ActivityManager.setDiplay(...)中的显示来将实现与SimpleLayoutPanel相结合。由于您的实现看起来像是应用程序的主要内容,因此ActiviyManager在这里可能很有用。
https://stackoverflow.com/questions/7672629
复制相似问题