Sen*_*rJD 2 java swing treenode jtree
我有一个问题,这里也有描述。
我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);
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是isExpanded()方法使用HashMap来存储扩展路径。新创建的似乎isExpanded()永远不会返回。(但它们确实被扩展了)trueTreePath
有什么办法可以解决这个问题吗?
展开/折叠适用于非叶节点,因此请确保相关节点不是叶节点:
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(存储扩展路径的位置)。