Java: procédure de programmation pour sélectionner et développer plusieurs nœuds dans un JTree?
J'ai un JTree
et un awt.Canvas
. Lorsque je sélectionne plusieurs objets dans le Canvas
dans le objList
, je veux que tous les éléments sélectionnés pour être montré à l'intérieur de la JTree
sélectionnée. Que signifie, par exemple, si j'ai 2 objets sélectionnés, leurs chemins d'accès à la racine doit être élargie, et chaque objet sélectionné doit avoir son correspondant TreeNode
sélectionné. Mon JTree a TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION
.
Voici un exemple de l'expansion de fonction que j'utilise :
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;
}
Dans mon état actuel, si je sélectionne un objet unique, il sera sélectionné dans le JTree
et ses TreePath
sera affiché.
Mais si entities
a plus de 1 objet sélectionné, il affiche rien, mon JTree
restera inchangée.
JTree
et un awt.Canvas
." Ne pas mélanger le Swing avec des composants AWT. Le Canvas
devrait être un JPanel
ou une image affichée dans un JLabel
.Je sais que je ne devrais pas l'habitude le faire (j'ai quelques problèmes avec le menu principal de l'expansion derrière la toile), mais dans ce cas, le seul lien entre eux est le tableau d'entités à partir de la toile qui sont représentés dans l'arbre. Et dans l'interface graphique il y a un espace entre eux, si aucun dommage n'est fait/
OriginalL'auteur Pantaziu Cristian | 2012-04-20
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la recherche pour le
TreeSelectionModel
de laJTree
(utilisation de la lecture). Utiliser leTreeSelectionModel#setSelectionPaths
pour de multiples chemins. Maintenant, vous êtes seulement un nœud sélectionné en raison de votretree.setSelectionPath(tpath);
appel. LeTreeSelectionModel
a aussi des méthodes pour ajouter/supprimer une sélection ,... (en gros tout ce dont vous pourriez avoir besoin dans le futur).Une méthode intéressante pour l'expansion est la
JTree#setExpandsSelectedPaths
méthode qui permet de configurer leJTree
d'étendre automatiquement chemins sélectionnés. Si vous souhaitez gérer cela manuellement, vous pouvez utiliser leJTree#setExpandedState
méthodeOriginalL'auteur Robin