我有两个JTrees实例(leftTree和rightTree)。用户可以从左侧树中选择一些节点,并将其添加到右侧树中。我在add按钮操作侦听器中有以下代码,用于在添加节点后在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层深。请帮我解决这个问题,如果你需要更多信息,请告诉我。
发布于 2011-02-21 17:08:05
对我来说,这种方法是不正确的。TreePath实际上是从当前节点到最顶层父节点的节点序列。换句话说,通过调用getParet()来创建来自节点的TreePath,直到到达tull为止。因此,如果您从一棵树中获取节点并创建路径,则路径是原始树中节点的序列,而在第二棵树中路径是无效的,因为路径中的一些节点在目标树模型中并不存在。
您需要获取选定的节点,并在第二个树中找到合适的节点。猜测一个具有相同用户对象的节点。对于目标树中找到的节点(如果我们找到了它),创建TreePath并选择/展开。
https://stackoverflow.com/questions/5062864
复制相似问题