【问题标题】:Jtree expansion and selection problemJtree扩展和选择问题
【发布时间】:2011-07-01 01:50:14
【问题描述】:

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

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布 SSCCE (pscode.org/sscce.html)。另请注意,虽然您可能认为您的问题很清楚,但提出问题总是值得的。 (有时候我太忙了,我对帖子做的第一件事就是在'?'上'找到'。如果没有找到'?',我会直接进入下一个线程。)跨度>

标签: java swing jtree


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-08-05
    • 2012-05-18
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    相关资源
    最近更新 更多