编程语言
首页 > 编程语言> > Java:如何以编程方式选择和扩展JTree中的多个节点?

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

作者:互联网

我有一个JTree和一个awt.Canvas.当我从Canvas中选择多个对象到objList时,我希望所有选定的项目都在JTree中显示为选中状态.这意味着,例如,如果我选择了2个对象,则应扩展它们到root的路径,并且每个所选对象也应选择其对应的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.
但是如果实体选择了多个对象,它将不会显示任何内容,我的JTree将保持不变.

解决方法:

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

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

标签:treenode,jtree,java,select,swing
来源: https://codeday.me/bug/20191006/1861580.html