Tengo un JTree
y un awt.Canvas
. Cuando selecciono varios objetos dentro del Canvas
en el objList
, deseo que todos los elementos seleccionados se muestren dentro del JTree
como seleccionado. Eso significa, por ejemplo, si tengo 2 objetos seleccionados, se deben expandir sus rutas a la raíz, y también cada objeto seleccionado debe tener su correspondiente TreeNode
seleccionado. Mi JTree tiene TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
.Java: ¿Cómo seleccionar programáticamente y expandir múltiples nodos en un JTree?
Aquí es una muestra de la funcion ampliar yo uso:
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;
}
En mi estado actual, si selecciono un único objeto, se selecciona en el JTree
y su TreePath
se mostrará. Pero si entities
tiene más de 1 objeto seleccionado, no mostrará nada, mi JTree
se mantendrá sin cambios.
* "Tengo un' JTree' y un 'awt.Canvas'." * No mezcle Swing con componentes AWT. El 'Canvas' debe ser un' JPanel' o una imagen mostrada en un 'JLabel'. –
Sé que normalmente no debería hacer eso (tengo algunos problemas con el menú principal que se expande detrás del lienzo), pero en este caso la única conexión entre ellos es la matriz de entidades del lienzo que están representadas en el árbol. Y en la GUI hay espacio entre ellos, así que no se hace daño/ –