GWT头部面板中中间元件的高度

GWT头部面板中中间元件的高度,gwt,Gwt,我正在使用GWTHeaderPanel。作为中间元素,我使用了DockLayoutPanel,如下所示: <g:DockLayoutPanel width="1200px" height="100%"> <g:west size="220"> <g:HTMLPanel styleName="{style.debug}"> something <br /> something &

我正在使用GWT
HeaderPanel
。作为中间元素,我使用了
DockLayoutPanel
,如下所示:

<g:DockLayoutPanel width="1200px" height="100%">
    <g:west size="220">
        <g:HTMLPanel styleName="{style.debug}">
            something <br />
            something <br />
        </g:HTMLPanel>
    </g:west>
</g:DockLayoutPanel>

好吧,我还没能解决这个问题,但对于未来的访问者来说:同样的问题可以通过使用带有北、中、南组件的
DockLayourPanel来实现(减去我无法解决的问题)。

好吧,我还没能解决这个问题,但是对于未来的访问者来说:同样的问题也可以实现(减去我无法解决的问题)使用带有北、中、南组件的
DockLayourPanel

布局面板101:
HeaderPanel
RequiresResize
面板,因此必须将其放入
ProvidesResize
面板,如
RootLayoutPanel
,(或作为
HeaderPanel
[1]的中间面板)或者给它一个明确的固定大小


[1]
HeaderPanel
不实施
ProvidesResize
,因为它只履行其中间面板的合同。

布局面板101:
HeaderPanel
是一个
RequiresResize
面板,因此必须将其放入
ProvidesResize
面板,例如
RootLayoutPanel
,(或作为
头部面板的中间面板)或指定明确的固定尺寸


[1]
HeaderPanel
不实施
ProvidesResize
,因为它只履行其中间面板的合同。

以下方法对我有效。它基于Zack Linder的建议

(1) 将HeaderLayoutPanel附加到RootLayoutPanel。HeaderLayoutPanel是您创建的一个类,用于扩展HeaderPanel并实现ProvidesResize()

(2) 接下来,实例化HeaderLayoutPanel。将分配页眉和页脚小部件 一个固定的高度(例如菜单栏高度),其宽度自动调整到 面板的宽度。中心部件应该是ProvideSize。我使用了LayoutPanel。 比如说,

 public class AppViewer extends Composite implements MyApp.AppDisplay {

private HeaderLayoutPanel allContentsPanel;
MenuBar menuBarTop;
MenuBar menuBarBottom;
LayoutPanel dataPanel;

public AppViewer() {

    allContentsPanel = new HeaderLayoutPanel(); 
    menuBarTop = new MenuBar(false);
    menuBarBottom = new MenuBar(false);
    dataPanel = new LayoutPanel();

    menuBarTop.setHeight("30px");
    menuBarBottom.setHeight("20px");

    allContentsPanel.setHeaderWidget(menuBarTop);       
    allContentsPanel.setFooterWidget(menuBarBottom);                            
    allContentsPanel.setContentWidget(dataPanel);

    initWidget(allContentsPanel);
}


@Override
public void doOnResize() {
    allContentsPanel.onResize();
}   
  }
    public class MyDataView extends Composite implements MyDataPresenter.DataDisplay {      
        private DockLayoutPanel pnlAllContents;
    private HorizontalPanel hpnlButtons;
    private HorizontalPanel hpnlToolbar;
    private VerticalPanel pnlContent;

    public MyView() {
    pnlAllContents=new DockLayoutPanel(Unit.PX);
    pnlAllContents.setSize("100%", "100%"); 
    initWidget(pnlAllContents);

    hpnlToolbar = new HorizontalPanel();
    hpnlToolbar.setWidth("100%");   
    pnlAllContents.addNorth(hpnlToolbar, 30);

    hpnlButtons = new HorizontalPanel();
    hpnlButtons.setWidth("100%");
    pnlAllContents.addSouth(hpnlButtons,20);

    pnlContent=new VerticalPanel(); 
    //center widget - takes up the remainder of the space
    pnlAllContents.add(pnlContent);

    ...
         }
}
(3) 中心小部件(LayoutPanel)将保存DeckLayoutPanel,我在 单独组合(但您可以做任何您想做的事情)。例如

 public class AppViewer extends Composite implements MyApp.AppDisplay {

private HeaderLayoutPanel allContentsPanel;
MenuBar menuBarTop;
MenuBar menuBarBottom;
LayoutPanel dataPanel;

public AppViewer() {

    allContentsPanel = new HeaderLayoutPanel(); 
    menuBarTop = new MenuBar(false);
    menuBarBottom = new MenuBar(false);
    dataPanel = new LayoutPanel();

    menuBarTop.setHeight("30px");
    menuBarBottom.setHeight("20px");

    allContentsPanel.setHeaderWidget(menuBarTop);       
    allContentsPanel.setFooterWidget(menuBarBottom);                            
    allContentsPanel.setContentWidget(dataPanel);

    initWidget(allContentsPanel);
}


@Override
public void doOnResize() {
    allContentsPanel.onResize();
}   
  }
    public class MyDataView extends Composite implements MyDataPresenter.DataDisplay {      
        private DockLayoutPanel pnlAllContents;
    private HorizontalPanel hpnlButtons;
    private HorizontalPanel hpnlToolbar;
    private VerticalPanel pnlContent;

    public MyView() {
    pnlAllContents=new DockLayoutPanel(Unit.PX);
    pnlAllContents.setSize("100%", "100%"); 
    initWidget(pnlAllContents);

    hpnlToolbar = new HorizontalPanel();
    hpnlToolbar.setWidth("100%");   
    pnlAllContents.addNorth(hpnlToolbar, 30);

    hpnlButtons = new HorizontalPanel();
    hpnlButtons.setWidth("100%");
    pnlAllContents.addSouth(hpnlButtons,20);

    pnlContent=new VerticalPanel(); 
    //center widget - takes up the remainder of the space
    pnlAllContents.add(pnlContent);

    ...
         }
}
(4) 最后,在onModuleLoad()类中,所有内容都绑定在一起:AppViewer生成 添加到RootLayoutPanel的显示,MyDataView生成一个显示 添加到容器中的。例如

public class MyApp implements EntryPoint,Presenter{

  private HasWidgets container=RootLayoutPanel.get();
  private static AppDisplay display;  
  private DataPresenter dataPresenter;

    public interface AppDisplay extends Display{
        @Override
        Widget asWidget();
        HasWidgets getContentContainer();
        void doOnResize();
        }

    @Override
    public void onModuleLoad() {
        display=new AppViewer();
        dataPresenter = new DataPresenter();
        display.getContentContainer().add(dataPresenter.getDisplay().asWidget());
        container.add(display.asWidget());
        bind();
        }

       @Override
       public void bind() {

    Window.addResizeHandler(new ResizeHandler() {
        @Override
        public void onResize(ResizeEvent event) {
            display.doOnResize();
        }
    });
        }


       @Override
       public com.midasmed.client.presenter.Display getDisplay() {
        return display;
       }
    }

希望这有帮助!

以下方法对我有效。它是基于扎克·林德的建议

(1) 将HeaderLayoutPanel附加到RootLayoutPanel。HeaderLayoutPanel是您创建的一个类,用于扩展HeaderPanel并实现ProvidesResize()

(2) 接下来,实例化HeaderLayoutPanel。将分配页眉和页脚小部件 一个固定的高度(例如菜单栏高度),其宽度自动调整到 面板的宽度。中心部件应该是ProvideSize。我使用了LayoutPanel。 比如说,

 public class AppViewer extends Composite implements MyApp.AppDisplay {

private HeaderLayoutPanel allContentsPanel;
MenuBar menuBarTop;
MenuBar menuBarBottom;
LayoutPanel dataPanel;

public AppViewer() {

    allContentsPanel = new HeaderLayoutPanel(); 
    menuBarTop = new MenuBar(false);
    menuBarBottom = new MenuBar(false);
    dataPanel = new LayoutPanel();

    menuBarTop.setHeight("30px");
    menuBarBottom.setHeight("20px");

    allContentsPanel.setHeaderWidget(menuBarTop);       
    allContentsPanel.setFooterWidget(menuBarBottom);                            
    allContentsPanel.setContentWidget(dataPanel);

    initWidget(allContentsPanel);
}


@Override
public void doOnResize() {
    allContentsPanel.onResize();
}   
  }
    public class MyDataView extends Composite implements MyDataPresenter.DataDisplay {      
        private DockLayoutPanel pnlAllContents;
    private HorizontalPanel hpnlButtons;
    private HorizontalPanel hpnlToolbar;
    private VerticalPanel pnlContent;

    public MyView() {
    pnlAllContents=new DockLayoutPanel(Unit.PX);
    pnlAllContents.setSize("100%", "100%"); 
    initWidget(pnlAllContents);

    hpnlToolbar = new HorizontalPanel();
    hpnlToolbar.setWidth("100%");   
    pnlAllContents.addNorth(hpnlToolbar, 30);

    hpnlButtons = new HorizontalPanel();
    hpnlButtons.setWidth("100%");
    pnlAllContents.addSouth(hpnlButtons,20);

    pnlContent=new VerticalPanel(); 
    //center widget - takes up the remainder of the space
    pnlAllContents.add(pnlContent);

    ...
         }
}
(3) 中心小部件(LayoutPanel)将保存DeckLayoutPanel,我在 单独组合(但您可以做任何您想做的事情)。例如

 public class AppViewer extends Composite implements MyApp.AppDisplay {

private HeaderLayoutPanel allContentsPanel;
MenuBar menuBarTop;
MenuBar menuBarBottom;
LayoutPanel dataPanel;

public AppViewer() {

    allContentsPanel = new HeaderLayoutPanel(); 
    menuBarTop = new MenuBar(false);
    menuBarBottom = new MenuBar(false);
    dataPanel = new LayoutPanel();

    menuBarTop.setHeight("30px");
    menuBarBottom.setHeight("20px");

    allContentsPanel.setHeaderWidget(menuBarTop);       
    allContentsPanel.setFooterWidget(menuBarBottom);                            
    allContentsPanel.setContentWidget(dataPanel);

    initWidget(allContentsPanel);
}


@Override
public void doOnResize() {
    allContentsPanel.onResize();
}   
  }
    public class MyDataView extends Composite implements MyDataPresenter.DataDisplay {      
        private DockLayoutPanel pnlAllContents;
    private HorizontalPanel hpnlButtons;
    private HorizontalPanel hpnlToolbar;
    private VerticalPanel pnlContent;

    public MyView() {
    pnlAllContents=new DockLayoutPanel(Unit.PX);
    pnlAllContents.setSize("100%", "100%"); 
    initWidget(pnlAllContents);

    hpnlToolbar = new HorizontalPanel();
    hpnlToolbar.setWidth("100%");   
    pnlAllContents.addNorth(hpnlToolbar, 30);

    hpnlButtons = new HorizontalPanel();
    hpnlButtons.setWidth("100%");
    pnlAllContents.addSouth(hpnlButtons,20);

    pnlContent=new VerticalPanel(); 
    //center widget - takes up the remainder of the space
    pnlAllContents.add(pnlContent);

    ...
         }
}
(4) 最后,在onModuleLoad()类中,所有内容都绑定在一起:AppViewer生成 添加到RootLayoutPanel的显示,MyDataView生成一个显示 添加到容器中的。例如

public class MyApp implements EntryPoint,Presenter{

  private HasWidgets container=RootLayoutPanel.get();
  private static AppDisplay display;  
  private DataPresenter dataPresenter;

    public interface AppDisplay extends Display{
        @Override
        Widget asWidget();
        HasWidgets getContentContainer();
        void doOnResize();
        }

    @Override
    public void onModuleLoad() {
        display=new AppViewer();
        dataPresenter = new DataPresenter();
        display.getContentContainer().add(dataPresenter.getDisplay().asWidget());
        container.add(display.asWidget());
        bind();
        }

       @Override
       public void bind() {

    Window.addResizeHandler(new ResizeHandler() {
        @Override
        public void onResize(ResizeEvent event) {
            display.doOnResize();
        }
    });
        }


       @Override
       public com.midasmed.client.presenter.Display getDisplay() {
        return display;
       }
    }

希望这有帮助!

您如何使用
HeaderPanel
?它的父窗口小部件是什么?(顺便说一句,您不需要调整
DockLayoutPanel
,这是
HeaderPanel
的责任。谢谢@ThomasBroyer,我已经添加了它(参见编辑2)我的HeaderPanel是如何完成的。如果我不调整DockLayoutPanel的大小,它的高度是0。您如何使用
HeaderPanel
?它的父窗口小部件是什么?(顺便说一句,您不需要调整
DockLayoutPanel
,这是
HeaderPanel
的责任。谢谢@ThomasBroyer我添加了它(见编辑2)如果我没有将DokLayOutPanel的大小做出来,它的高度为0 DokLayurPanels是一个<代码> RealRestResivie。当它在“代码>标题面板< /COD> >的中间面板时,是否应该调整大小,或者它不是因为<代码> HealePanel 总体上不执行PosieReSige?<代码> >aderPanel
确实为其中间面板提供了调整大小功能,这是小部件的关键。唯一的原因
HeaderPanel
不是
ProvidesResize
是因为它没有履行页眉和页脚小部件的合同(很明显)明白。但我想做的应该行得通,对吧?前提是
HeaderPanel
本身是给定大小的。
RootPanel
不会这样做。你需要一个
RootLayoutPanel
ResizePanel
。就是这样。HeaderPanel也需要一个大小。非常感谢!
DockLayourPanel
RequiresizePanel当它位于“代码>标题面板< /代码>的中间面板时,是否应该调整大小,或者它不是因为<代码>标题面板< /代码>总体上不执行PosieReSimple吗?<代码> HealePanel < /Cord>确实提供了它的中间面板的大小,这是小部件的关键。esResize
是因为它没有履行页眉和页脚小部件的契约(非常明显)明白。但我想做的应该行得通,对吧?前提是
HeaderPanel
本身是给定大小的。
RootPanel
不会这样做。你需要一个
RootLayoutPanel
ResizePanel
。就是这样。HeaderPanel也需要一个大小。非常感谢!