1

列のパーセンテージ サイズ変更を使用して、テーブルに親の幅を強制的に適用したいと考えています。

setColumnPercentageSizing() メソッドは非表示の列を除外していないようで、幅を正しく計算しないため、デフォルトで列を非表示にすると、これは機能しません。

私のコードでこれを調整する簡単な方法はありますか?

例:

public void example(){
    createGlazedListsGridLayer();
    autoResizeColumns();
    nattable.configure();
}

public GlazedListsGridLayer createGlazedListsGridLayer(){
    SortedList<T> sortedList = new SortedList<>(eventList, null);
    this.bodyDataProvider = new ListDataProvider<>(sortedList, 
      columnPropertyAccessor);
    this.bodyDataLayer = new DataLayer(this.bodyDataProvider);
    ColumnHideShowLayer columnHideShowLayer = new
      ColumnHideShowLayer(bodyDataLayer);

    // In this example, hide the first column
    columnHideShowLayer.hideColumnPositions(Lists.newArrayList(0));
    this.bodyLayerStack = new DefaultBodyLayerStack(new 
      GlazedListsEventLayer<>(columnHideShowLayer, eventList));

    //...etc
}

protected void autoResizeColumns() {
    glazedListsGridLayer.getBodyDataLayer().setColumnPercentageSizing(true);
    nattable.addConfiguration(new DefaultNatTableStyleConfiguration() {
        {
            cellPainter = new LineBorderDecorator(new TextPainter(false, 
              true, 5, true));
        }
    });
}

アップデート

理想的ではありませんが、これは私がそれに到達できる最も近いものです

public void adjustColumnWidth() {
    getBodyDataLayer().setColumnPercentageSizing(false);
    // Avoid the first column since it's hidden
    for (int x = 1; x <= numColumns; x++) {
        getBodyDataLayer().setColumnWidthByPosition(x,
                getParent().getSize().x / numColumns, true);
    }
}

更新 2

ここに、さまざまな組み合わせで試したいくつかの異なるものがあります。テーブルにデータが動的に入力された後、列を非表示にしたままにするものはないようです。

protected void enableAutoResizeColumns() {
    getBodyDataLayer().setColumnPercentageSizing(true);
    getBodyDataLayer().setDefaultColumnWidthByPosition(0, 0);
    getBodyDataLayer().setColumnWidthByPosition(0, 0);
    getBodyDataLayer().setColumnWidthPercentageByPosition(0, 0);
    getNatTable().addConfiguration(new 
       DefaultNatTableStyleConfiguration() {
        {
            cellPainter = new LineBorderDecorator(new TextPainter
              (false, true, 5, true));
        }
    });
}
4

1 に答える 1