Java:如何以编程方式选择和扩展JTree中的多个节点?
我有一个JTree
和一个awt.Canvas
。 当我从Canvas
选择多个对象到objList
,我希望所有选定的项目都在JTree
为选中状态。 这意味着,例如,如果我选择了2个对象,则应扩展其到root的路径,并且每个所选对象也应选择其对应的TreeNode
。 我的JTree有TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
。
这是我使用的扩展function的示例:
public void selectTreeNodes() { HashMap 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
选择了多个对象,它将不会显示任何内容,我的JTree
将保持不变。
您正在寻找JTree
的TreeSelectionModel
(使用getter)。 将TreeSelectionModel#setSelectionPaths
用于多个路径。 现在,由于tree.setSelectionPath(tpath);
您只设置了一个节点tree.setSelectionPath(tpath);
呼叫。 TreeSelectionModel
还具有添加/删除现有选择的方法,…(基本上您将来可能需要的所有内容)。
一种有趣的扩展方法是JTree#setExpandsSelectedPaths
方法,该方法允许配置JTree
以自动扩展所选路径。 如果要手动管理,可以使用JTree#setExpandedState
方法