Bonjour,
Comment affecter une icône à un noeud particulier du JTree et non à tous les noeuds d'un même niveau...
Bonjour,
Comment affecter une icône à un noeud particulier du JTree et non à tous les noeuds d'un même niveau...
Bonjour,
Peut être pourrais-tu y parvenir en redefinissant un TreeCellRenderer
A++
Il n'y a pas d'autre solution !Envoyé par NicoWrmCorp
Si tu veux simplement modifier les icones pour les noeuds "pliés", "dépliés" et les feuilles, il existe des propriétés du JTree pour cela.
Si tu veux que certains noeuds aient un icone particulier et pas les autres (comme cela semble être le cas), tu n'as pas d'autre choix que de définir un TreeCellRenderer spécifique.
mais TreeCellRenderer gère les icones de tout le graph or moi je veux que l'icône d'un noeud particulier.
Oui en effet il gère l'affichage de tous les noeuds : à toi de rendre spécifique l'affichage de tes noeuds spécifiques ...
exemple
a_oValue est un DefaultMultableTreeNode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public Component getTreeCellRendererComponent( JTree a_oTree, Object a_oValue, boolean a_bSelected, boolean a_bExpanded, boolean a_bLeaf, int a_iRow, boolean a_bHasFocus) { //récupération de l'object utilisateur MyTreeNode o_oNode = (MyTreeNode)a_oValue; Component o_oCp = o_oNode.getUI(a_bSelected); return o_oCp; }
Il te suffit de surcharger cette classe (MyTreeNode), et de lui mettre par exemple une methode getUI() qui va retourner le composant bien spécifique au noeud à afficher.
A++
Tu n'es pas obligé de tout refaire, dans ta méthode tu fais appel à la méthode par défaut et tu redéfinie pour le cas que tu souhaites.
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class MyRenderer extends DefaultTreeCellRenderer { public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; //Condition pour laquelle tu veux changer l'icone if (node.getUserObject() instanceof Etat && !((Etat) node.getUserObject()).isDisponible()) { //On affecte à la feuille une icone différente setIcon(GifsaImage.getIconIE()); } return this; } }
Partager