我有一个TreeTableView
并且我有一个自定义 TreeTableCell ,我在其中重写了该updateItem
方法,以便根据某些条件呈现我的单元格(设置为禁用或启用)。问题是,如果我进行一些滚动,表格不会刷新,并且正如您在附加图像中看到的那样,即使某些单元格不满足条件,它们也会被禁用。大量滚动后,所有单元格都被禁用(灰显)。我尝试了两件事来解决问题:添加一些事件侦听器以“手动”刷新表,例如:
treeTable.addEventFilter(ScrollEvent.ANY, event -> treeTable.refresh());
渲染问题消失了,但是如果我进行更重的滚动,它会变得如此滞后,就像应用程序以 10-15 fps 运行一样,因为刷新事件触发得太频繁了。我尝试过的另一件事是java.util.Timer
在滚动时创建一个 timer() 来触发刷新,例如每 50 毫秒触发一次刷新。然后滞后消失,但渲染单元格有延迟,因此您可以观察单元格颜色从灰色到白色的变化。如果我选择较小的时间间隔,它会变得滞后,并且我无法在滞后和延迟之间找到平衡,而且我还认为我的两个解决方案都只是解决方法,而不是问题的真正解决方案。
你有其他想法来解决这个问题吗?
附图:TableCells
@Override
public void updateItem(Boolean item, boolean empty) {
MyCustomRow row = getTreeTableRow().getItem();
if (row != null && row.isCondition()) {
editableProperty().set(false);
super.updateItem(item, empty);
}
}