如何在GWT中替换DockLayoutPanel的中心面板?

use*_*916 3 java gwt

在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在这里可能很有用.