我遇到了一个问题,也被描述为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
。 (但他们真的扩大了)
有没有办法解决这个问题?
答案 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(存储扩展路径的位置)。