У меня есть JTree
и awt.Canvas
. Когда я выбираю несколько объектов из Canvas
в objList
, я хочу, чтобы все выбранные элементы отображались внутри выбранного JTree
. Это означает, например, если у меня выбрано 2 объекта, оба их пути к корню должны быть расширены, а также каждый выбранный объект должен иметь свой соответствующий TreeNode
. У моего JTree есть TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
.Java: Как программно выбирать и расширять несколько узлов в JTree?
Вот образец расширения несильно я использую:
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
имеет более одного выбранного объекта, он ничего не отобразит, мой JTree
останется без изменений.
* «У меня есть« JTree »и« awt.Canvas ». * Не смешивайте Swing с компонентами AWT. «Холст» должен быть «JPanel» или изображением, отображаемым в «JLabel». –
Я знаю, что я обычно не должен этого делать (у меня есть некоторые проблемы с главным меню, расширяющимся за холстом), но в этом случае единственное соединение между ними - это массив сущностей из холста, которые представлены в дереве. И в GUI есть некоторое пространство между ними, поэтому никакого вреда не делается/ –