首页 文章

Jtree扩展和选择问题

提问于
浏览
0

我有两个JTree实例(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层 . 请帮我解决这个问题,如果您需要更多信息请告诉我 .

1 回答

  • 1

    对我来说这种方法是不正确的 . TreePath实际上是从当前节点到最顶层父节点的节点序列 . 换句话说,通过调用getParet()直到达到tull来创建节点的TreePath . 因此,如果从一个树获取节点并创建路径,则路径是原始树中的节点序列,并且路径在第二个树中是徒劳的,因为路径中的某些节点在目标树模型中不存在 .

    您需要获取所选节点并在第二个树中找到合适的节点 . 猜测具有相同用户对象的节点 . 目标树中找到的节点(如果我们找到它)创建TreePath并选择/展开 .

相关问题