我有一些简单的代码将TreeItem与TreeTableView(来自其父TreeItem的子列表)取消链接,然后将其作为先前兄弟的新子项链接回来。例如,如果结构是:
A
B
C
D
E
然后在"降级"之后D,你应该看到:
A
B
C
D
E
操作完成后,递归打印例程显示子列表已正确构建。但是,显示器不会更新,至少不会完全更新。我仍然将节点D视为B和E的兄弟,而不是C的兄弟。折叠和重新扩展B校正显示。执行此操作的代码如下所示(其中" item"是降级的TreeItem," D"上面):
TreeItem<FldViewNode> parent = item.getParent ();
List<TreeItem<FldViewNode>> siblings = parent.getChildren (); // TreeItems at same level as ones being deleted
// New parent will be previous sibling of us.
int itemIx = siblings.indexOf (item); // This is where we are in parent's children
if (itemIx <= 0)
{
System.out.printf("Cannot demote first child");
return;
}
siblings.remove (itemIx); // Remove this item from parent's children's list
// Insert back as new last children of previous sibling of item
TreeItem<FldViewNode> newParent = siblings.get (itemIx - 1); // Sibling just above item to demote
List<TreeItem<FldViewNode>> newSiblings = newParent.getChildren (); // TreeItems at same level as ones being demoted
newSiblings.add (item); // Insert just after new parent's existing children as a new child
在调试器(Eclipse)中检查newSiblings
或通过递归打印方法显示它是正确的,显然它是,因为折叠/展开显示正确的值。一些其他更改,例如简单地删除节点(即,注释掉上面的newSiblings.add)确实正确显示 - 删除的节点显示为立即消失,无需人工展开/折叠以强制刷新。 ObservableList
TreeTableView
看到树结构发生了哪些变化,这不是{{1}}的全部概念吗?我错过了什么? :)
有什么想法吗?谢谢!