GWT头部面板中中间元件的高度
我正在使用GWTGWT头部面板中中间元件的高度,gwt,Gwt,我正在使用GWTHeaderPanel。作为中间元素,我使用了DockLayoutPanel,如下所示: <g:DockLayoutPanel width="1200px" height="100%"> <g:west size="220"> <g:HTMLPanel styleName="{style.debug}"> something <br /> something &
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也需要一个大小。非常感谢!