我有一个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。 (但它们确实在扩展)

有什么办法解决这个问题?

最佳答案

展开/折叠在非叶节点上有效,因此请确保所讨论的节点不是叶:

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(存储扩展路径的位置)。

10-05 23:54