JTree:TreeNode 和 TreePath 之间缺少链接

Sen*_*rJD 2 java swing treenode jtree

我有一个问题,这里也有描述。

invertExpandMyTree课堂上有这样的方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是isExpanded()方法使用HashMap来存储扩展路径。新创建的似乎isExpanded()永远不会返回。(但它们确实被扩展了)trueTreePath

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

kle*_*tra 5

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑(根据OP的评论)

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