JTree, arborescences et rafraichissement - Java - Programmation
Marsh Posté le 05-12-2004 à 18:03:25
le repaint(), c'est une baffe !
tu dois faire toutes tes modification de la structure par model.insert(). et pas directement sur la racine ou les noeuds.
fais voir ton code complet ?
Marsh Posté le 05-12-2004 à 18:24:04
nraynaud a écrit : le repaint(), c'est une baffe ! |
ah ouais ?
nraynaud a écrit : |
argh... mais comment je peux faire si je veux, non pas modifier mais reconstruire l'arbre depuis le début ?
nraynaud a écrit : |
heu.. complet je pense pas, mais je vais essayer de montrer un truc compréhensible, en fait, j'ai 3 niveaux de profondeur, et j'ai sous-classé DefaultMutableTreeNode 3 fois pour chaque niveau de profondeur et pis.... pff ouais j'ai 5 ~ 6 classes juste pour ça
j'arrive
Marsh Posté le 05-12-2004 à 18:37:07
Code :
|
donc en fait, j'ai un actualiser général qui appele les actualiser() des neuds enfants.
donc vous voyez, ça a rapport avec des établissement universitaires, et désolé, c'est en français mais ça j'ai pas trop le choix
ah oui, dans ma classe où j'apelle tout ça :
Code :
|
parce que bon, moi modifier en fait, je vais pas le faire, sinon, je vais toujours devoir modifier 2 trucs en même temps, je préfèrerais faire un reset directement sur le TreeNode root, ou même sur le JTree, de toutes façons, cette partie là du code est assez pourrite donc je suis plus à ça près
Marsh Posté le 05-12-2004 à 18:44:43
raytaller a écrit : argh... mais comment je peux faire si je veux, non pas modifier mais reconstruire l'arbre depuis le début ? |
tu refait tout depuis la racine, puis tu fais un model.setRoot() ou un truc du style.
(comme tu commences à être autonome et que je suis en 56k, je fais tout de tête, à toi de faire google pour vérifier les noms des fonctions).
L'idée c'est que les noeuds et la racine ne son pas observés par la vue, mais uniquement le modèle. Donc toute modif doit être faite par le modèle et pas directement dans les noeuds.
Marsh Posté le 05-12-2004 à 18:50:17
l'histoire du modèle qui modifie l'arbre, c'est le Pattern "Façade", le modèle est une façade pour tout le bordel de l'arbre.
Marsh Posté le 05-12-2004 à 18:54:42
ReplyMarsh Posté le 05-12-2004 à 19:16:40
yaaarghghgh
ça marche.
maintenant je vais méditer sur ce que tu as écrit, je débute en patterns
merci
Marsh Posté le 06-12-2004 à 16:39:56
Il me semble qu'il y'avait un truc du genre updateTreeUI qui permettait de rafraichir l'arbre en cas de modification (c'est vieux dans ma tête).
Marsh Posté le 02-11-2009 à 11:16:58
Merci pour le JTree.updateUI() !
Comme quoi, les vieux forums, ça sert toujours...
Marsh Posté le 05-12-2004 à 17:42:57
Il m'arrive quelque chose de bizarre.
J'ai un objet qui a une structure d'arbre, et je sais que cette structure est bonne, et je voudrais l'afficher dans un arbre.
J'ai une sous classe de DefautMutableTreeNode, et je crée avec des instances de cette classe une structure en arbre qui est exactement la représentation de la structure à représenter ( j'ai testé en mode texte, elle marche parfaitement).
Maintenant, j'ai un JTree auquel j'applique en root la racine de la structure arborescente.
J'ai des problèmes de rafraîchissement. En effet, le JTree affiche bien l'arborescence que je lui file, mais si je la modifie en route, y'a des bugs étranges.
Je précise que, n'ayant pas eu envie de réfléchir trop, pour rafraichir ma stucture de MutableTreeNodes, je fais un removeAllChildren() sur la racine et je reconstruis tout (mais de toutes façons, c'est pas le problème puisque cette structure est bonne).
regardez ça :
ça c'est quand je lui file une arbo vide :
maintenat j'ajoute un truc dans la structure à représenter, je reconstruis mon arborescence de TreeNodes depuis le début, et j'affiche avec un repaint(); :
super, ça a marché nickel et là je recommence pour un second :
vous remarquerez que le petit trait vertical a disparu (et il ne revient pas après un autre repaint donc, c'est un vrai problème)
en fait, le TreeNode que j'ai ajouté est bien présent dans l'arbo, mais le JTree ne l'affiche pas, même si y'a une différence après, c'est pas exactement celle que je veux.
vous savez comment je pourrais être sûr qu'il s'est bien updaté après modification de l'arbo ?