0

FlowPanel を拡張するクラスがあります。次のように DataGrid ウィジェットと Grid ウィジェットを追加します。

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

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

this.add(dataGrid);
this.add(grid);

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

DataGrid ウィジェットのみが表示されます。FlowPanel から VerticalPanel への切り替えと、グリッドを FlowPanel にラップすることの両方を試みましたが、喜びはありませんでした。DataGrid と Grid を 2 行 1 列の Grid に入れてみましたが、何も表示されませんでした。これは Safari の GWT 2.6.0 です。

この場合、setHeight() と setWidth() が何をしているのか誤解していると思いますが、よくわかりません。レイアウトに関してGWTが何をしていると考えているかを確認する方法はありますか?

ありがとう。

4

2 に答える 2

2

FlowPanel 内の利用可能なすべてのスペースを取るように DataGrid に指示します。次に、Grid ウィジェットに同じことをするように指示します。その結果、DataGrid が FlowPanel の高さの 100% を占めた後、グリッド用のスペースが残っていないため、Grid の高さがゼロになります。

高さに「50%」を使用するか、DataGrid を固定サイズ (「100px」) にしてから、残りを取得するようにグリッドに指示する必要があります。これを実現する最も簡単な方法は、LayoutPanel を使用することです。次に例を示します。

layoutPanel.setWidgetTopHeight(dataGrid, 0, Unit.PX, 100, Unit.PX);
layoutPanel.setWidgetTopBottom(grid, 100, Unit.PX, 0, Unit.PX);

編集:

これは、DataGrid のサイズを変更するために使用するコードです。

public void resize(final boolean addHeader, final boolean addFooter) {
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {

        @Override
        public void execute() {
            // 37 is the height of header and footer based on my CSS
            int height = addHeader ? 37 : 0;
            if (addFooter) {
                height += 37;
            }
            for (int i = 0; i < getRowCount(); i++) {
                height += getRowElement(i).getOffsetHeight();
            }
            setHeight(height + "px");
        }
    });
}

この方法を使用する場合は、単純に DataGrid を FlowPanel に追加してから、Grid を FlowPanel に追加します。DataGrid で resize() を呼び出し、DataGrid または Grid で高さや幅を設定しないでください。

より細かい制御については、フレックス ボックス レイアウトモデルを参照してください。最新のすべてのブラウザでサポートされています。

于 2015-05-14T15:22:53.500 に答える
1

@Patrick、あなたのコメントに関して、私はDockLayoutPanelを使用してサイズ変更を処理します。

DockLayoutPanel gridPanel = new DockLayoutPanel(Unit.PCT);
gridPanel.addNorth(dataGrid, 60);  //datagrid will take 60% of the panel
gridPanel.add(grid);  //grid will take the remaining space
于 2015-05-15T11:31:44.957 に答える