在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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我继续得到一个例外,说我无法取代它.更换/更改DockLayoutPanel中心面板的最佳方法是什么?
谢谢.
Hil*_*amp 10
您需要显式删除中心(请参阅受保护insert
方法的javadoc DockLayoutPanel
):
dlp.remove(currentCenterPanel);
Run Code Online (Sandbox Code Playgroud)
但这不是非常适合开发人员,因为您需要跟踪中心窗口小部件并始终确保在添加之前调用remove.我不知道他们为什么这样做.
另一种解决方案可能是简单地将一个SimpleLayoutPanel
中心窗口小部件设置为在此面板上设置您自己的中心窗口小部件setWidget
.这样你就不必去除了.
后一种技术还可以将实现与ActivityManager
设置SimpleLayoutPanel
为显示相结合ActivityManager.setDiplay(...)
.由于您的实现看起来像是应用程序的主要内容,因此ActiviyManager
在这里可能很有用.