2

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

我在课堂上有这样的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. (但它们确实被扩展了)

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

4

1 回答 1

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);
    }
}

编辑(根据OP的评论)

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

于 2013-07-18T10:44:08.200 回答