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

时间:2008-09-17 19:48:16

标签: java 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%,但仍然无法正常工作。谢谢你的建议,但似乎它可能会起作用。还有其他建议??

8 个答案:

答案 0 :(得分:19)

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);

答案 1 :(得分:13)

Ben的回答非常好,但也过时了。在GWT 1.6中需要调整大小处理程序,但我们现在处于2.4。您可以使用DockLayoutPanel让您的内容垂直填充页面。请参阅使用此面板的sample mail app

答案 2 :(得分:0)

我认为你需要在分割的左侧和/或右侧放置一些东西(split.setLeftWidget(widget),split.setRightWidget(widget)或split.add(widget),这将首先添加到向左,然后向右),以便显示任何内容。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

DecoratorPanel的文档说:

  

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

对我来说,如果我只设置宽度

,它就不起作用
  

panel.setWidth( “100%”);

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

  

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

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