NatTable - 使用列隐藏的大小调整百分比

时间:2016-11-21 16:51:38

标签: java nattable

我想使用列百分比大小来强制表占用父级的宽度。

默认情况下隐藏列时,这不起作用,因为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));
        }
    });
}

1 个答案:

答案 0 :(得分:1)

目前没有解决方案。原因是列宽在DataLayer中计算。 ColumnHideShowLayer位于其顶部,只是隐藏列。它没有与DataLayer进行通信,而是隐藏了某些东西。

最后,ColumnHideShowLayer需要根据隐藏状态重新触发百分比大小计算。但目前还没有API。

如果您知道如何解决问题,请随意创建增强票并提供补丁。