Java的:如何以编程方式选择,并在JTree展开多个节点?(Java: How to progra

2019-06-23 19:06发布

我有一个JTreeawt.Canvas 。 当我选择从内多个对象CanvasobjList ,我想显示里面所有选定项目JTree的选择。 这意味着,例如,如果我有选择的2个对象,既它们根路径应扩大,并且还每个选定的对象应具有其相应的TreeNode选择。 我的JTree有TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION

这里是扩大funcion我使用的示例:

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将保持不变。

Answer 1:

您正在寻找TreeSelectionModel的的JTree (使用吸气剂)。 使用TreeSelectionModel#setSelectionPaths的多条路径。 现在你选择了一个节点仅设置因您的tree.setSelectionPath(tpath); 呼叫。 该TreeSelectionModel也有方法来添加/删除现有的选区,...(基本上你可能需要在未来的一切)。

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



文章来源: Java: How to programmatically select and expand multiple nodes in a JTree?