Gerer les couleurs des branches d'un arbre suivant le focus - Java - Programmation
Marsh Posté le 22-12-2004 à 00:07:39
pourquoi t'utilise pas tout simplement le:
# getTreeCellRendererComponent(JTree tree,
# Object value,
# boolean sel,
# boolean expanded,
# boolean leaf,
# int row,
# boolean hasFocus){
au lieu de mettre un listener
Marsh Posté le 22-12-2004 à 12:02:28
Merci mais je suis obligé de mettre un listener... essaye tu verra le hasFocus ne fait vraiment ce à quoi tu penses !
En effet, lorsque l'on se déplace dans le jTree, par exemple vers le haut, la méthode getTreeCellRendererComponent est utilisé 2 fois
- une fois pour le noeud on l'on vient d'accéder (hasFocus = true)
- une fois pour le noeud on l'on vient d'arriver (hasFocus = false)
de plus si l'on descend, l'ordre est inversé, cela devient :
- une fois pour le noeud on l'on vient d'arriver (hasFocus = false)
- une fois pour le noeud on l'on vient d'accéder (hasFocus = true)
Mon erreur etait toute simple...
ce n'est pas dans les méthodes focusGained et focusLost qu'il faut mettre à jour les couleurs (puisque celle ci vont être écrasées), mais dans ces méthodes il faut simplement mettre à jour les variables qui vont être utilisées par le getTreeCellRendererComponent .
Compris ?
Apres avoir donc galérer un bon gros moment je vous donne ici la solution que j'ai retenue... et qui est bien évidemment super simple quand on la (la solution)
Code :
|
Voila....
J'espère que cela sera utile à d'autres.
Sébastien
Marsh Posté le 22-12-2004 à 19:38:10
pas mal
pour toutes tes constantes/couleurs, tu aurais sans doute avantage à les remplacer par une map, ne fut-ce que pour la concision.
et je suis pas sur d'avoir capté l'utilité de tes membres _color* !?
(y'a une raison au fait qu'ils soient publics? meme question pour les constantes...)
Marsh Posté le 22-12-2004 à 22:16:58
Effectivement une jolie map ca peut le faire :-)
Par contre il est vrai qu'il n'y a aucun intérêt à ce que les membres soient publics.
C'est une bête erreur
Pour ce qui est de l'utilité des membres _color* c'est uniquement une question
d'historique de la classe.
De toute facon, il y a forcément moyen de faire plus jolie...
Sébastien
Marsh Posté le 22-12-2004 à 22:42:20
nan, le principe est bon, effectivement, le renderer par défaut est un Component, qui gère des évènements comme les autres.
C'est d'ailleur un composant qui se déplace avec le curseur de la souris lui aussi (mais ça se voit pas).
Marsh Posté le 21-12-2004 à 17:05:11
Bonjour a tous ...
J'ai un Jtree auquel j'ai besoin de faire
setCellRenderer(un DefaultTreeCellRenderer )
addFocusListener(un FocusListener )
et addTreeSelectionListener(un TreeSelectionListener)
pour cela j'ai fait une classe
Le défaut est que le getTreeCellRendererComponent passe APRES focusGained, focusLost et valueChanged.
Ce qui fait que mon code ne sert a rien !
Puisque les couleurs sont écrasé par celles de getTreeCellRendererComponent
Le but est le suivant :
-mon arbre gere des panneaux qui sont visible ou invisible suivant la feuille de l'arbre choisie.
-Lorsque l'on selectionne les feuilles elles ont une couleur différente.
-si l'on modifie qq chose dans le panneau associé le texte de l'arbre change de couleur
-et si le focus n'est plus sur l'arbre mais DANS le panneau, je veux qu'il soit coloré autrement. C'est ce dernier point qui ne fonctionne pas.
Actuellement la feuille de l'arbre est bleu lors de sa selection, et si je me deplace (donc je perd le focus sur l'arbre) il reste bleu. Moi je veux qu'il devienne d'une autre couleur.. par exemple orange. Et que lorsque je revienne dessus...il revienne bleu...
je m'arrache la tete avec ca c'est extraordinaire .. alors que cela ne semble pas sorcier... !!!
Au passage signalons que j'ai surchargé JTree pour lui ajouté cela
Merci a ceux qui ont des idées ...
je sens que je vais devenir sinon !