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