在GWT中创建流体面板以填充页面?

我希望GWT中的一个面板填充页面而不必实际设置大小。 有没有办法做到这一点? 目前我有以下内容:

public class Main implements EntryPoint { public void onModuleLoad() { HorizontalSplitPanel split = new HorizontalSplitPanel(); //split.setSize("250px", "500px"); split.setSplitPosition("30%"); DecoratorPanel dp = new DecoratorPanel(); dp.setWidget(split); RootPanel.get().add(dp); } } 

使用前面的代码段,没有任何内容显示。 是否有方法调用我不见了?

谢谢。


更新于2008年9月17日20:15

我在每一侧放了一些按钮(明确设置它们的大小),但仍然无效。 我真的很惊讶,不像FillLayout类或setFillLayout方法或setDockStyle(DockStyle.Fill)或类似的东西。 也许这不可能? 但是,就像GWT一样受欢迎,我认为这是可能的。

更新于2008年9月18日14:38

我已经尝试将RootPanel的宽度和高度设置为100%,但仍然无法正常工作。 感谢您的建议,但似乎它可能会起作用。 还有其他建议吗?

Google已在其常见问题解答中回答了您问题的主要部分: http : //code.google.com/webtoolkit/doc/1.6/FAQ_UI.html#How_do_I_create_an_app_that_fills_the_page_vertically_when_the_b

主要的一点是你不能将高度设置为100%,你必须这样做:

 final VerticalPanel vp = new VerticalPanel(); vp.add(mainPanel); vp.setWidth("100%"); vp.setHeight(Window.getClientHeight() + "px"); Window.addResizeHandler(new ResizeHandler() { public void onResize(ResizeEvent event) { int height = event.getHeight(); vp.setHeight(height + "px"); } }); RootPanel.get().add(vp); 

Ben的答案非常好,但也过时了。 在GWT 1.6中需要resize处理程序,但我们现在处于2.4。 您可以使用DockLayoutPanel让您的内容垂直填充页面。 请参阅使用此面板的示例邮件应用程序 。

我认为你需要在分割的左侧和/或右侧放置一些东西(split.setLeftWidget(widget),split.setRightWidget(小部件)或split.add(小部件),它将首先添加到左侧,然后为了让任何东西出现,在右边)。

在添加窗口小部件之前,请尝试将rootpanel的宽度和/或高度设置为100%。

面板会自动调整为可见的最小宽度。 因此,您必须将添加到RootPanel的每个面板调整为100%,包括SplitPanel。 RootPanel本身不需要resize。 所以尝试:

 split.setWidth("100%"); split.setHeight("100%"); 

DecoratorPanel的文档说:

如果设置DecoratorPanel的宽度或高度,则需要将middleCenter单元格的高度和宽度设置为100%,以便middleCenter单元格占用所有可用空间。 如果您没有设置DecoratorPanel的宽度和高度,它将紧紧包裹其内容。

问题是,DecoratorPanel middleCenter单元格将默认填充您的内容,而SplitPanel不允许“100%”样式大小设置。 要做你想做的事,在你的CSS上适当地设置表的样式:

.gwt-DecoratorPanel .middleCenter {height:100%; 宽度:100%; }

对我来说,如果我只设置宽度就行不通

panel.setWidth( “100%”);

面板是一个VerticalPanel,它只是随机大小,我不知道它来自哪里。 但在我添加这条线之后,@ Ben Bederson所评论的内容对我来说非常有用:

panel.setWidth(Window.getClientWidth()+“px”);

就是这样,没有别的。 谢谢