Java FX TreeTableView更改无法显示

时间:2014-11-30 19:01:18

标签: javafx treetableview

我有一些简单的代码将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}}的全部概念吗?我错过了什么? :)

有什么想法吗?谢谢!

0 个答案:

没有答案