Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1398 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JTree, arborescences et rafraichissement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JTree, arborescences et rafraichissement

n°915194
raytaller
Posté le 05-12-2004 à 17:42:57  profilanswer
 

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 :
http://tom.rethaller.free.fr/_lab/uni/scr_0.png
 
 
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(); :
 
http://tom.rethaller.free.fr/_lab/uni/scr_1.png
 
 
super, ça a marché nickel et là je recommence pour un second :
 
http://tom.rethaller.free.fr/_lab/uni/scr_2.png
 
 
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 ?

mood
Publicité
Posté le 05-12-2004 à 17:42:57  profilanswer
 

n°915206
nraynaud
lol
Posté le 05-12-2004 à 18:03:25  profilanswer
 

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 ?


---------------
trainoo.com, c'est fini
n°915210
raytaller
Posté le 05-12-2004 à 18:24:04  profilanswer
 

nraynaud a écrit :

le repaint(), c'est une baffe !


 
ah ouais ?  
 

nraynaud a écrit :


tu dois faire toutes tes modification de la structure par model.insert(). et pas directement sur la racine ou les noeuds.


 
argh... mais comment je peux faire si je veux, non pas modifier mais reconstruire l'arbre depuis le début ?
 
 

nraynaud a écrit :


fais voir ton code complet ?


 
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

n°915218
raytaller
Posté le 05-12-2004 à 18:37:07  profilanswer
 

Code :
  1. // donc ça c'est le root, Etablissement, qui contient des promos
  2. public class EtablissementTreeNode extends UniTreeNode {
  3. Donnees donnees;
  4. // ...
  5. public void actualiser() {
  6.  Object[] _promos = donnees.getPromotions();
  7.  removeAllChildren();
  8.  for (int i = 0; i < _promos.length; ++i) {
  9.   PromotionTreeNode _promo = new PromotionTreeNode((Promotion) _promos[i]);
  10.   _promo.actualiser();
  11.   ajouterPromotion(_promo);
  12.  }
  13. }
  14. }
  15. // pis après, chaque Promotion contient des ClasseGroupe, et chaque ClasseGroupe contient un Groupe  
  16. public class ClasseGroupeTreeNode extends UniTreeNode {
  17. // ...
  18. public void actualiser(){
  19.  Object[] _groupes=classeGroupe.getGroupes();
  20.  removeAllChildren();
  21.  for(int i=0; i<_groupes.length; ++i){
  22.   ajouterGroupe(new GroupeTreeNode((Groupe)_groupes[i]));
  23.  }
  24. }
  25. }


 
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 :
  1. private EtablissementTree getEtablissementTree() {
  2.  if (etablissementTree == null) {
  3.   arbo=new EtablissementTreeNode(Donnees.getDonneesGlobales()); // ouais, c'est un singleton qui contient tout ce dont j'ai besoin, c'est ces données que je modifie en cours de root
  4.   arbo.actualiser();
  5.   etablissementTree = new EtablissementTree(arbo);
  6.   etablissementTree.ajouterChangeSelectionListener(new ChangeSelectionGestionnaire()); //  désolé... :(
  7.  }
  8.  return etablissementTree;
  9. }


 
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
 

n°915222
nraynaud
lol
Posté le 05-12-2004 à 18:44:43  profilanswer
 

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.


---------------
trainoo.com, c'est fini
n°915227
nraynaud
lol
Posté le 05-12-2004 à 18:50:17  profilanswer
 

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.


---------------
trainoo.com, c'est fini
n°915230
raytaller
Posté le 05-12-2004 à 18:54:42  profilanswer
 

je regarde ça, merci et

nraynaud a écrit :

je suis en 56k, je fais tout de tête

mes respects.

n°915248
raytaller
Posté le 05-12-2004 à 19:16:40  profilanswer
 

yaaarghghgh
 
ça marche.
maintenant je vais méditer sur ce que tu as écrit, je débute en patterns
 
merci

n°915947
gzii
court-circuit
Posté le 06-12-2004 à 16:39:56  profilanswer
 

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).

n°1936980
pkdick2
Posté le 02-11-2009 à 11:16:58  profilanswer
 

Merci pour le JTree.updateUI() !
Comme quoi, les vieux forums, ça sert toujours...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JTree, arborescences et rafraichissement

 

Sujets relatifs
Comment savoir ,dans une JTree, si le fichier selectionné est ouvert ?Jtree x Custom CellRenderer x CardPanel -> Memoire qui explose
JTree avec arborescence de la machine[SWING] IHM et JTREE
[Java] Problème de taille mémoire avec un JTreeJTree avec des JCheckBox
Désactivé le son du rafraichissement d'une page sur internet explorer.[PHP]script autonome et rafraichissement de page distante
[Swing] Ouverture automatique d'un Jtreecacher le curseur et taux de rafraichissement
Plus de sujets relatifs à : JTree, arborescences et rafraichissement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR