Java: как программно выбрать и развернуть несколько узлов в JTree?
у меня есть 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;
}
In мое текущее состояние, если я выберу один объект, он будет выбран в JTree
и TreePath
будет показано.
Но если ... --10--> имеет более 1 выбранного объекта, он ничего не будет отображать, мой JTree
останется без изменений.
1 ответов
вы ищете TreeSelectionModel
на JTree
(использовать геттер). Используйте TreeSelectionModel#setSelectionPaths
на несколько путей. Теперь вы устанавливаете только один узел, выбранный из-за вашего tree.setSelectionPath(tpath);
звонок. The TreeSelectionModel
также есть методы для добавления/удаления в существующий выбор... (в основном все, что вам может понадобиться в будущем).
интересным методом расширения является JTree#setExpandsSelectedPaths
метод, который позволяет настроить JTree
для автоматического расширения выбранного пути. Если вы хотите управлять этим вручную, вы можете использовать JTree#setExpandedState
метод