更换GWT DockLayoutPanel目录

更换GWT DockLayoutPanel目录,gwt,Gwt,我试图从菜单栏替换DockLayoutPanel中心部分的内容。菜单栏将位于北部,但“内容”(表格、报告等)将位于中心 我想我可以从根面板(索引0,因为它是唯一直接连接到它的小部件)抓取整个DockLayoutPanel,然后以某种方式删除center的当前内容并插入新的。不幸的是,getWidget(intindex)是非静态的,所以它不工作 有人能告诉我正确的方法吗?非工作代码如下: // snipped package and import details public class me

我试图从菜单栏替换DockLayoutPanel中心部分的内容。菜单栏将位于北部,但“内容”(表格、报告等)将位于中心

我想我可以从根面板(索引0,因为它是唯一直接连接到它的小部件)抓取整个DockLayoutPanel,然后以某种方式删除center的当前内容并插入新的。不幸的是,getWidget(intindex)是非静态的,所以它不工作

有人能告诉我正确的方法吗?非工作代码如下:

// snipped package and import details

public class menubar extends Composite {

private static menubarUiBinder uiBinder = GWT.create(menubarUiBinder.class);

interface menubarUiBinder extends UiBinder<Widget, menubar> {
}

@UiField MenuBar applicationMenuBar;
@UiField MenuBar processMenuBar;
@UiField MenuBar reportsMenuBar;
@UiField MenuItem addPowerRequirementCmd;
@UiField MenuItem powerUsageReportCmd;

public menubar() {
    initWidget(uiBinder.createAndBindUi(this));

    // command to replace whatever is in DockLayoutPanel.CENTER w/ AddPowerRequirement
    // FormPanel
    addPowerRequirementCmd.setCommand(new Command() {

        @Override
        public void execute() {

            // get DockLayoutPanel from the RootPanel (it's the only widget, should be
            // index 0
            DockLayoutPanel dlp = (DockLayoutPanel) RootPanel.getWidget(0);

            // clear out DockLayoutPanel.CENTER

            // insert the FormLayoutPanel into DockLayoutPanel.CENTER
            dlp.add(new PowerRequirementForm());
        }
    });

    // command to replace whatever is in DockLayoutPanel.CENTER w/ power usage report
    powerUsageReportCmd.setCommand(new Command() {

        @Override
        public void execute() {

        }
    });
}
//剪切的包和导入详细信息
公共类菜单栏扩展了复合{
私有静态menubarUiBinder uiBinder=GWT.create(menubarUiBinder.class);
接口menubarUiBinder扩展了UiBinder{
}
@UiField菜单栏应用菜单栏;
@UiField菜单栏处理菜单栏;
@UiField菜单栏报告菜单栏;
@UiField菜单项addPowerRequirementCmd;
@UiField MenuItem powerUsageReportCmd;
公共菜单栏(){
initWidget(uiBinder.createAndBindUi(this));
//命令替换DockLayoutPanel.CENTER中的任何内容,并添加PowerRequirement
//模板
addPowerRequirementCmd.setCommand(新命令(){
@凌驾
public void execute(){
//从根面板获取DockLayoutPanel(它是唯一的小部件,应该是
//索引0
DockLayoutPanel dlp=(DockLayoutPanel)RootPanel.getWidget(0);
//清空DockLayoutPanel.CENTER
//将FormLayoutPanel插入DockLayoutPanel.CENTER
添加(新的PowerRequirementForm());
}
});
//用于替换DockLayoutPanel.CENTER(带电源使用报告)中任何内容的命令
powerUsageReportCmd.setCommand(新命令(){
@凌驾
public void execute(){
}
});
}
}


谢谢!

像菜单栏一样,使用
ui:field
属性,从UiBinder:

<g:DockLayoutPanel ui:field="dockPanel"/>
但是,听起来您希望根据应用程序状态在面板中央显示一组小部件。a是一个更好的解决方案:

<g:DockLayoutPanel>
  <g:center>
    <g:DeckPanel ui:field="deck">
      <g:FlowPanel>Panel #0</g:FlowPanel>
      <g:FlowPanel>Panel #1</g:FlowPanel>
    </g:DeckPanel>
  </g:center>
</g:DockLayoutPanel>

与菜单栏一样,使用
ui:field
属性从UiBinder获取对DockLayoutPanel的引用:

<g:DockLayoutPanel ui:field="dockPanel"/>
但是,听起来您希望根据应用程序状态在面板中央显示一组小部件。a是一个更好的解决方案:

<g:DockLayoutPanel>
  <g:center>
    <g:DeckPanel ui:field="deck">
      <g:FlowPanel>Panel #0</g:FlowPanel>
      <g:FlowPanel>Panel #1</g:FlowPanel>
    </g:DeckPanel>
  </g:center>
</g:DockLayoutPanel>

当您有多个需要显示的“页面”时,这是常见的解决方案吗?我甚至还没有为应用程序的许多管理功能启动菜单选项。是的。手动添加/删除小部件将不太容易维护。当您有多个“页面”时,这是常见的解决方案吗需要显示哪些内容?我甚至还没有为应用程序的许多管理功能启动菜单选项。是的。手动添加/删除小部件的可维护性较差。