NatTable 1.6 - TreeLayer - expand/collapse 三角形在折叠上面的一行后不跟随它们的行
NatTable 1.6 - TreeLayer - expand/collapse triangles don't follow their rows after collapsing a row above
当我在 NatTable 的 TreeLayer 中折叠一行时,它的子行消失,而其他行向上移动。
在 NatTable 1.5.0 中,expand/collapse 图标随着它们的行向上移动。
在 NatTable 1.6.0 中,expand/collapse 图标保留在它们原来的行索引处,它们的行曾经所在的位置。
我需要在 1.6 中做一些额外的事情吗?例如,要使树层从其 ITreeRowModel 更新?
编辑
这是问题的说明。当 NatTable 升级到 1.6 时发生,没有其他代码更改。
不幸的是,这是一个没有被注意到的倒退。主要是因为大多数人似乎将 TreeLayer
与 GlazedLists 一起使用。而 NatTable 项目甚至没有没有 GlazedLists 的使用示例。
我已经创建了工单并解决了问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=552727
您可以同时通过以下方式覆盖 TreeLayer#getConfigLabelsByPosition(int, int)
来解决此问题:
public LabelStack getConfigLabelsByPosition(int columnPosition, int rowPosition) {
LabelStack configLabels = super.getConfigLabelsByPosition(columnPosition, rowPosition);
if (isTreeColumn(columnPosition)) {
configLabels.addLabelOnTop(TREE_COLUMN_CELL);
ILayerCell cell = getCellByPosition(columnPosition, rowPosition);
if (cell != null) {
int rowIndex = getRowIndexByPosition(cell.getOriginRowPosition());
configLabels.addLabelOnTop(
DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + this.treeRowModel.depth(rowIndex));
if (!this.treeRowModel.hasChildren(rowIndex)) {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_LEAF_CONFIG_TYPE);
} else {
if (this.treeRowModel.isCollapsed(rowIndex)) {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE);
} else {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE);
}
}
}
}
return configLabels;
}
主要问题是在 1.6 实现中缺少原始行位置到索引的转换。
当我在 NatTable 的 TreeLayer 中折叠一行时,它的子行消失,而其他行向上移动。
在 NatTable 1.5.0 中,expand/collapse 图标随着它们的行向上移动。
在 NatTable 1.6.0 中,expand/collapse 图标保留在它们原来的行索引处,它们的行曾经所在的位置。
我需要在 1.6 中做一些额外的事情吗?例如,要使树层从其 ITreeRowModel 更新?
编辑
这是问题的说明。当 NatTable 升级到 1.6 时发生,没有其他代码更改。
不幸的是,这是一个没有被注意到的倒退。主要是因为大多数人似乎将 TreeLayer
与 GlazedLists 一起使用。而 NatTable 项目甚至没有没有 GlazedLists 的使用示例。
我已经创建了工单并解决了问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=552727
您可以同时通过以下方式覆盖 TreeLayer#getConfigLabelsByPosition(int, int)
来解决此问题:
public LabelStack getConfigLabelsByPosition(int columnPosition, int rowPosition) {
LabelStack configLabels = super.getConfigLabelsByPosition(columnPosition, rowPosition);
if (isTreeColumn(columnPosition)) {
configLabels.addLabelOnTop(TREE_COLUMN_CELL);
ILayerCell cell = getCellByPosition(columnPosition, rowPosition);
if (cell != null) {
int rowIndex = getRowIndexByPosition(cell.getOriginRowPosition());
configLabels.addLabelOnTop(
DefaultTreeLayerConfiguration.TREE_DEPTH_CONFIG_TYPE + this.treeRowModel.depth(rowIndex));
if (!this.treeRowModel.hasChildren(rowIndex)) {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_LEAF_CONFIG_TYPE);
} else {
if (this.treeRowModel.isCollapsed(rowIndex)) {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_COLLAPSED_CONFIG_TYPE);
} else {
configLabels.addLabelOnTop(DefaultTreeLayerConfiguration.TREE_EXPANDED_CONFIG_TYPE);
}
}
}
}
return configLabels;
}
主要问题是在 1.6 实现中缺少原始行位置到索引的转换。