GWT中的基本面板嵌套

时间:2014-06-12 11:13:37

标签: java gwt

在GWT中可以嵌套基本面板吗?

<g:HTMLPanel>
     <g:HTMLPanel>
      .......
     </g:HTMLPanel>
  <g:ScrollPanel>
     <g:HTMLPanel>
      ........  
     </g:HTMLPanel>
  </g:ScrollPanel>
</g:HTMLPanel> 

我的问题是我需要滚动第二个HTML面板。我的UIBinder将在父HTMLPanel下包含两个子HTMLPanel。但我需要第二个htmlpanel滚动。

3 个答案:

答案 0 :(得分:1)

我刚刚创建了一个新的GWT项目和

UiBinder文件:

 <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style>
    .important {
        font-weight: bold;
    }
    </ui:style>
    <g:HTMLPanel>
        <g:HTMLPanel>
        First panel
    </g:HTMLPanel>
    <g:ScrollPanel height="100px">
    <g:HTMLPanel>
            aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>
            aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>
            aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>
            aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>aaaaaaaaaa<br/>
    </g:HTMLPanel>
    </g:ScrollPanel>
    </g:HTMLPanel>

</ui:UiBinder> 

和Java文件

public class RetaTest extends Composite implements HasText {

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

    interface RetaTestUiBinder extends UiBinder<Widget, RetaTest> {
    }

    public RetaTest() {
        initWidget(uiBinder.createAndBindUi(this));
    }


    public RetaTest(String firstName) {
        initWidget(uiBinder.createAndBindUi(this));
    }


    @Override
    public String getText() {
        // TODO Auto-generated method stub
        return null;
    }


    @Override
    public void setText(String text) {
        // TODO Auto-generated method stub

    }

}

和onModuleLoad

  public void onModuleLoad() {

    RootPanel.get().add(new RetaTest());
  }

有效。 TestPicture

答案 1 :(得分:0)

GWT中有一些小组从父母那里获取他们的大小和/或为他们的孩子提供大小。例如,当您将HTMLPanel添加到RootPanel时,RootPanel会为此HTMLPanel提供自己的大小(等于浏览器视图)。

但是,HTMLPanel没有实现ProvideResize()接口。因此,当您向其添加另一个HTMLPanel和ScrollPanel时,这些面板的初始高度为零。之后,这些小组从他们自己的孩子身上取得了他们的身高。

这意味着当您向其添加更多内容时,ScrollPanel将继续展开,并且它永远不会开始滚动。您有两种方法可以解决此问题。

首先,您可以在ScrollPanel上设置高度(即height =&#34; 100px&#34;)。

其次,您可以使用LayoutPanel而不是HTMLPanel作为视图的容器,并将HTMLPanel和ScrollPanel添加到此LayoutPanel的不同图层。每一层都为其孩子提供了一个大小。

在这两种情况下,您的ScrollPanel都将具有指定的高度(以像素,百分比,ems等为单位)。因此,一旦其子项的高度超过其自身高度,它将开始滚动。

答案 2 :(得分:0)

修复滚动面板的宽度,但不要修复其子HTML面板的宽度。然后它应该工作。 除了相应地修复宽度属性外,代码中没有任何问题。

这只是您问题的完全解决方案。但要理解除此之外的一些内容,请阅读Andrevi Glovin给出的第一个答案。