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