JTree:TreeNode和TreePath之间缺少链接

时间:2013-07-17 15:06:30

标签: java swing jtree treenode

我遇到了一个问题,也被描述为here

我在invertExpand类中有MyTree方法,其工作原理如下:

public void invertExpand(DefaultMutableTreeNode node) {
    TreePath path = new TreePath(node.getPath()); // no better way to get TreePath from TreeNode :(
    if (!isExpanded(path)) {
        expandPath(path);
    } else {
        collapsePath(path);
    }
}

但问题是isExpanded()方法使用HashMap来存储扩展路径。似乎isExpanded()永远不会为新创建的true返回TreePath。 (但他们真的扩大了)

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:4)

展开/折叠适用于非叶节点,因此请确保相关节点不是叶子:

public void invertExpand(DefaultMutableTreeNode node) {
    if (node.isLeaf()) 
        node = (DefaultMutableTreeNode) node.getParent();
    TreePath path = new TreePath(node.getPath()); // no better way to get TreePath from TreeNode :(
    if (isExpanded(path)) {
        collapsePath(path);
    } else {
        expandPath(path);
    }
}

修改(根据OP的评论)

错误行为的真正原因是自定义节点中错误实现的hasCode,它混淆了Map(存储扩展路径的位置)。