Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NatTable-列隐藏时的百分比大小调整_Java_Nattable - Fatal编程技术网

Java NatTable-列隐藏时的百分比大小调整

Java NatTable-列隐藏时的百分比大小调整,java,nattable,Java,Nattable,我想使用列百分比大小来强制表采用父表的宽度 在默认情况下隐藏列时,这不起作用,因为setColumnPercentageSizing()方法似乎不排除隐藏列,也不正确计算宽度 在我的代码中有没有一种简单的方法来调整这一点 例如: public void example(){ createGlazedListsGridLayer(); autoResizeColumns(); nattable.configure(); } public GlazedListsGridLa

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

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

目前还没有解决方案。原因是列宽是在数据层中计算的。
ColumnHideShowLayer
位于其顶部,只是隐藏列。它不会向
数据层
返回隐藏的信息

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


如果您对如何解决问题有任何想法,请随时创建一个增强标签并提供一个补丁。

谢谢您提供的信息。我必须做一个工作,这是张贴在上面。不太理想,但由于该功能不受支持,目前距离足够近。问题是,您需要静态隐藏列还是用户应该能够隐藏和显示列。ATM不支持后者。如果静态地希望以编程方式隐藏列,为什么要使用列隐藏/显示功能,而不是简单地将列的宽度设置为0?该解决方案的缺点是,在调整窗口大小时,列的大小不会根据父组合大小进行调整。使用动态行进行静态隐藏。如果我显式地将所需的列宽设置为零,它将临时工作。一旦动态行进入,隐藏列就会显示出来。这没有意义。为什么要在显示行后更改列宽?这是一个好问题:)。我不知道它为什么这么做。我猜它会以某种方式在内部重新计算宽度
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);
    }
}
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));
        }
    });
}