在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中心面板的最佳方法是什么?
感谢。
答案 0 :(得分:10)
您需要明确删除中心(请参阅insert
中受保护的DockLayoutPanel
方法的javadoc):
dlp.remove(currentCenterPanel);
但这不是非常适合开发人员,因为您需要跟踪中心窗口小部件并始终确保在添加之前调用remove。我不知道他们为什么这样做。
另一种解决方案可能是简单地将SimpleLayoutPanel
作为中心窗口小部件,并通过setWidget
在此面板上设置您自己的中心窗口小部件。这样你就不用去了。
后一种技术还可以通过将ActivityManager
设置为SimpleLayoutPanel
中的显示,将实现与ActivityManager.setDiplay(...)
结合起来。由于您的实现看起来像是应用程序的主要内容,ActiviyManager
在这里可能很有用。