2014-06-12 82 views
0

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

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

我的問題是我需要滾動第二個HTML面板。我的UIBinder將在父HTMLPanel下包含兩個子HTMLPanel。但我需要第二個htmlpanel滾動。

+0

我已經測試,但似乎不工作。想知道你的簡短答案。你如何得到它的工作? – Jain

回答

0

GWT中有面板從他們的父母身上取出大小和/或爲他們的孩子提供大小。例如,當您將HTMLPanel添加到RootPanel時,RootPanel將自己的大小(等於瀏覽器視圖)提供給此HTMLPanel。

但是,HTMLPanel沒有實現ProvideResize()接口。所以,當你添加另一個HTMLPanel和一個ScrollPanel時,這些面板的初始高度爲零。之後,這些面板從他們自己的孩子身上消失。

這意味着您的ScrollPanel會在您添加更多內容時繼續擴展,並且它永遠不會開始滾動。你有兩個選擇來解決這個問題。

首先,您可以在ScrollPanel上設置高度(即height =「100px」)。其次,您可以使用LayoutPanel而不是HTMLPanel作爲視圖的容器,並將HTMLPanel和ScrollPanel添加到此LayoutPanel的不同圖層。每層爲其子提供一個大小。

在這兩種情況下,您的ScrollPanel都會有一個指定的高度(像素,百分數,ems等)。因此,一旦其子高度超過其高度,它將開始滾動。

+0

謝謝@Andrei。你指出了完全錯過的東西。 – Jain

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

我知道它使用java代碼。但請再次閱讀問題,我問UIBinder – Jain

+1

與UiBinder一起試用。 –

+0

@Ovi ..感謝你的努力。沒有在滾動面板上添加height =「100px」是我的錯誤。 – Jain

0

修復滾動面板的寬度,但不修復其子面板HTML寬度。那麼它應該工作。 代碼中沒有問題,除非相應地修復寬度屬性。

這只是確切的解決你的問題。但要理解除了這個之外的一些內容,請閱讀Andrevi Glovin給出的第一個答案。