Java:如何以编程方式选择和展开 JTree 中的多个节点?

标签 java swing select jtree treenode

我有一个 JTree 和一个 awt.Canvas。当我从 Canvas 中选择多个对象到 objList 中时,我希望所有选择的项目都显示在 JTree 中作为选择。这意味着,例如,如果我选择了 2 个对象,它们到根的路径都应该展开,而且每个选定的对象都应该选择其对应的 TreeNode。我的 JTree 有 TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION

这是我使用的扩展函数的示例:

public void selectTreeNodes() {


    HashMap <String, MyEntity> entities = ...;
    Iterator it = entities.keySet().iterator();
    while (it.hasNext()) {

        String str = it.next().toString();
        MyEntity ent = entities.get(str);

        if (ent.isSelected()) {
            DefaultMutableTreeNode searchNode = searchNode(ent.getName());
            if (searchNode != null) {

                TreeNode[] nodes = ((DefaultTreeModel) tree.getModel()).getPathToRoot(searchNode);
                TreePath tpath = new TreePath(nodes);
                tree.scrollPathToVisible(tpath);
                tree.setSelectionPath(tpath);
            }
        }
    }
}

public DefaultMutableTreeNode searchNode(String nodeStr) 
{ 
    DefaultMutableTreeNode node = null; 

    Enumeration enumeration= root.breadthFirstEnumeration(); 
    while(enumeration.hasMoreElements()) {

        node = (DefaultMutableTreeNode)enumeration.nextElement(); 
        if(nodeStr.equals(node.getUserObject().toString())) {

            return node;                          
        } 
    } 

    //tree node with string node found return null 
    return null; 
}

在我当前的状态下,如果我选择一个对象,它将在 JTree 中被选中,并且它的 TreePath 将被显示。 但是如果 entities 选择了超过 1 个对象,它不会显示任何内容,我的 JTree 将保持不变。

最佳答案

您正在寻找 JTreeTreeSelectionModel(使用 getter)。使用 TreeSelectionModel#setSelectionPaths对于多条路径。现在,由于您的 tree.setSelectionPath(tpath); 调用,您只需设置一个选定的节点。 TreeSelectionModel 还具有添加/删除现有选择的方法,...(基本上是您将来可能需要的所有内容)。

一个有趣的扩展方法是 JTree#setExpandsSelectedPaths允许配置 JTree 自动扩展所选路径的方法。如果你想手动管理它,你可以使用 JTree#setExpandedState方法

关于Java:如何以编程方式选择和展开 JTree 中的多个节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242896/

相关文章:

java - java中与异常处理相关的错误

java - 如何获取java html解析器中嵌套标签之间的内容?

Java Swing : Waiting for Mouse Clicked event before returning an Int

javascript - 如何跟踪是否使用 javascript 选择了文件?

sql - ORACLE SQL 获取从 2 个选择语句中检索的两个值的差异

java - 满足循环退出条件时执行的else语句

java - 是否可以在数组中创建动态列数?

java - Swing MVC JTextPane 以及其他人通常使用的

Java:jpopupmenu 中的子菜单出现分隔符和快捷键?

c - Select() 永远不会返回 true