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

时间:2011-10-06 09:46:11

标签: 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);     
    }
}

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中心面板的最佳方法是什么?

感谢。

1 个答案:

答案 0 :(得分:10)

您需要明确删除中心(请参阅insert中受保护的DockLayoutPanel方法的javadoc):

dlp.remove(currentCenterPanel);

但这不是非常适合开发人员,因为您需要跟踪中心窗口小部件并始终确保在添加之前调用remove。我不知道他们为什么这样做。

另一种解决方案可能是简单地将SimpleLayoutPanel作为中心窗口小部件,并通过setWidget在此面板上设置您自己的中心窗口小部件。这样你就不用去了。

后一种技术还可以通过将ActivityManager设置为SimpleLayoutPanel中的显示,将实现与ActivityManager.setDiplay(...)结合起来。由于您的实现看起来像是应用程序的主要内容,ActiviyManager在这里可能很有用。