2

GWT ショーケースと、私が見つけた多くの例では、DataGrid の非常に単純な使用法が常にあります。

  1. UIBinder で DataGrid 要素を定義し、そのフィールドを提供するように設定します。
  2. ビューコンストラクターでグリッドを初期化し、列を定義してデータを追加します。
  3. UIバインダーが生成される
  4. 期待どおりに提示されたすべて..

しかし、一般的なケースはそれほど静的ではありません。通常、グリッドを設定しますが、ユーザーが何かを行った後 (ボタンをクリックするなど) にのみ提供される可能性のあるデータを持っていません。

複雑な UI レイアウトで DataGrid を表示するには、かなりの時間がかかりました:| そのために、グリッドは現在、幅と高さが 100% の SimpleLayoutPanel でホストされており、この SimpleLayoutPanel はドッキング パネル内にあります。しかし、理由がわかりません-グリッドはドッキングパネルのサイズを超えて表示されるため、スクロールバーの下端が表示されません。

これは私の UI バインダーです (わかりやすくするためにいくつかのものを削除しました)。

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g="urn:import:com.google.gwt.user.client.ui">

<ui:style>

.sidePadding {
    padding-left: 8px;
        padding-right: 8px;
 }

    .expanded {
    width: 100%;
    height: 100%;
}


<g:DockLayoutPanel unit="PX" styleName="{style.expanded}">
    <g:north size="45">
        ...
    </g:north>
    <g:center>
    </g:center>
        ...
    <g:east size="190">
        <g:FlowPanel styleName="{style.sidePadding}">
            <g:FlowPanel>
                <g:Label>SOME TOOLBAR</g:Label>
            </g:FlowPanel>
            <g:HTMLPanel>
                <g:Label>SOME PANEL PANEL </g:Label>
            </g:HTMLPanel>
            <g:FlowPanel ui:field="eastContent">
                <g:Label>SOME FLOW PANEL</g:Label>
            </g:FlowPanel>
            <g:SimpleLayoutPanel ui:field="imagesGrid" addStyleNames="{style.expanded}"/>
        </g:FlowPanel>
    </g:east>
</g:DockLayoutPanel>

</ui:UiBinder>

結局のところ、東のパネルは 650px の高さを取得します。これは正しい値ですが、SimpleLayoutPanel 内の DataGrid も同じ高さを取得します! その前にいくつかのラベルなどがあるため、東のパネルのサイズからはみ出します..

助けて?

更新: 東パネルからすべてを削除し、DataGrid の SimpleLayoutPanel のみを残すと、うまくいくようです。しかし、グリッドの上にこれらすべての余分なラベルを追加する必要があります-解決策が見つかりません. ??

4

1 に答える 1

3

https://developers.google.com/web-toolkit/doc/latest/DevGuideUiPanelsを参照してください。

レイアウト パネル (ウィジェット) は、他のレイアウト パネル (ウィジェット)RequiresResizeに入れ子にする必要があります。または、明示的かつ固定サイズのレイアウト パネル (つまり、親パネルのパーセンテージで指定されていませんむしろピクセル単位です)。ProvidesResizeRootLayoutPanelResizePanel

ここで、 と の間FlowPanelで階層が壊れます。DockLayoutPanelSimpleLayoutPanel

FlowPanelを aと交換してHeaderPanel、すべてFlowPanelの をヘッダー(コンテナー内FlowPanel) に入れ、あなたSimpleLayoutPanel(またはあなたのDatagrid) をcontentとして入れたいと思うかもしれません。
を実装していないにもかかわらずProvidesResizeHeaderPanelこのコントラクトを尊重しますが、コンテンツの子のみを尊重します (これが重要です:のサイズとヘッダーフッターの固有のサイズに応じて、コンテンツHeaderPanelの子のサイズを変更します) 。

于 2012-04-22T13:54:33.997 に答える