我有两个JTrees实例(leftTree和rightTree)。用户可以从左侧树中选择一些节点,并将其添加到右侧树中。我在添加按钮操作侦听器中具有以下代码,以在添加节点后展开并在rightTree中选择该节点。
rightTree.updateUI();
TreePath[] paths = leftTree.getSelectionPaths();
if (null != paths && paths.length > 0)
{
TreePath path = paths[0];
DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
rightTree.scrollPathToVisible(new TreePath(node.getPath()));
rightTree.setSelectionPaths(paths);
}
leftTree.clearSelection();
该代码对于某些节点似乎工作正常,但对于leftTree中的某些其他节点则无法工作。问题是即使执行了以上代码后,rightTree仍处于折叠状态,而我看不到所选节点。
我已经尝试在JTree中使用其他方法,例如setExpandsSelectedPaths(true),expandPath(new TreePath(node.getParent()))。另外,尝试在执行上述代码后调用rightTree.repaint()或rightTree.validate()。但是问题仍然存在。但是rightTree.isExpanded(new TreePath(node.getParent()))重新运行为true;
我的树深约7-8层。请帮助我解决此问题,如果需要更多信息,请告诉我。
最佳答案
对我来说,这种方法是不正确的。实际上,TreePath是从当前节点到最高父节点的节点序列。换句话说,通过调用getParet()直到到达tull为止,创建来自节点的TreePath。
因此,如果从一棵树中获取一个节点并创建路径,则该路径是原始树中的节点序列,而第二棵树中的路径是徒劳的,因为目标树模型中不存在该路径中的某些节点。
您需要获取选定的节点并在第二棵树中找到一个合适的节点。猜一个具有相同用户对象的节点。在目标树中找到的节点(如果找到)的,创建TreePath并选择/扩展。