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

  FORUM HardWare.fr
  Programmation
  Java

  Refresh JTree

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Refresh JTree

n°1389062
denebj
Posté le 16-06-2006 à 14:54:41  profilanswer
 

Hello tout le monde :-)
 
Vala, j'ai un petit soucis  :o  
 
Je vous explique mon soucis, j'affiche une arborescence à partir d'un fichier XML (à l'aide d'un JTree), dans cette arborescence je modifie des valeurs sur des attributs, puis j'enregistre cette nouvelle arbo dans le même fichier XML. (Je l'écrase quoi^^)
 
Le truc c'est que j'aimerais refraichir l'affichage, qui est différent puisque j'ai modifié des valeurs.  :sweat:  
 
Je fais ça: parcours du fichier xml => affichage de ce fichier => modification du fichier sur le dur que j'ai parcouru => ré-affichage en refaisant le parcours de ce fichier.
 
Mon arbre est construit de la façon suivante: tout est sur listener, c'est à dire dés qu'il clique sur un noeud ça expande juste ses fils etc..
 
Merki

mood
Publicité
Posté le 16-06-2006 à 14:54:41  profilanswer
 

n°1389078
zapan666
Tout est relatif
Posté le 16-06-2006 à 14:57:51  profilanswer
 

J'ai ca en stock :  
 

Code :
  1. public void updateTree() {
  2.         ((DefaultTreeModel) treeGroup.getModel()).setRoot(createTree());
  3.         ((DefaultTreeModel) treeGroup.getModel()).reload();
  4.     }


 
treeGroup c'est ton JTree
createTree() est une fonction qui genere l'arbre avec des DefaultMutableNode


---------------
my flick r - Just Tab it !
n°1389117
denebj
Posté le 16-06-2006 à 15:18:16  profilanswer
 

Hum, moi j'ai des DefaultTreeMutableNode pour mon arbre. Mais j'ai essayé ça (je le met dans mon listener, lorsque l'utilisateur clique sur un bouton present dans un noeud, ça doit faire la mise à jour).
Cela me genere max erreur lol:
 

Code :
  1. java.lang.NullPointerException
  2. at javax.swing.plaf.basic.BasicTreeUI.completeEditing(Unknown Source)
  3. at javax.swing.plaf.basic.BasicTreeUI.completeEditing(Unknown Source)
  4. at javax.swing.plaf.basic.BasicTreeUI.updateCellEditor(Unknown Source)
  5. at javax.swing.plaf.basic.BasicTreeUI.setEditable(Unknown Source)
  6. at javax.swing.plaf.basic.BasicTreeUI$Handler.propertyChange(Unknown Source)
  7. at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
  8. at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
  9. at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
  10. at java.awt.Component.firePropertyChange(Unknown Source)
  11. at javax.swing.JComponent.firePropertyChange(Unknown Source)
  12. at javax.swing.JTree.setEditable(Unknown Source)
  13. at XML.Arbo$1.valueChanged(Arbo.java:139)
  14. at javax.swing.JTree.fireValueChanged(Unknown Source)
  15. at javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
  16. at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
  17. at javax.swing.tree.DefaultTreeSelectionModel.clearSelection(Unknown Source)
  18. at javax.swing.tree.VariableHeightLayoutCache.rebuild(Unknown Source)
  19. at javax.swing.tree.VariableHeightLayoutCache.treeStructureChanged(Unknown Source)
  20. at javax.swing.plaf.basic.BasicTreeUI$Handler.treeStructureChanged(Unknown Source)
  21. at javax.swing.tree.DefaultTreeModel.fireTreeStructureChanged(Unknown Source)
  22. at javax.swing.tree.DefaultTreeModel.nodeStructureChanged(Unknown Source)
  23. at javax.swing.tree.DefaultTreeModel.setRoot(Unknown Source)
  24. at XML.Arbo$2.actionPerformed(Arbo.java:231)
  25. at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
  26. at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
  27. at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
  28. at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
  29. at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
  30. at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
  31. at java.awt.Component.processMouseEvent(Unknown Source)
  32. at javax.swing.JComponent.processMouseEvent(Unknown Source)
  33. at java.awt.Component.processEvent(Unknown Source)
  34. at java.awt.Container.processEvent(Unknown Source)
  35. at java.awt.Component.dispatchEventImpl(Unknown Source)
  36. at java.awt.Container.dispatchEventImpl(Unknown Source)
  37. at java.awt.Component.dispatchEvent(Unknown Source)
  38. at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
  39. at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
  40. at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
  41. at java.awt.Container.dispatchEventImpl(Unknown Source)
  42. at java.awt.Window.dispatchEventImpl(Unknown Source)
  43. at java.awt.Component.dispatchEvent(Unknown Source)
  44. at java.awt.EventQueue.dispatchEvent(Unknown Source)
  45. at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
  46. at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  47. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  48. at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  49. at java.awt.EventDispatchThread.run(Unknown Source)


J'ai mis ça :  

Code :
  1. ((DefaultTreeModel) tree.getModel()).setRoot(top);       
  2.         ((DefaultTreeModel) tree.getModel()).reload();


 
top contient juste l'element racine de mon arbre.
 
[/CODE]

n°1392571
gocho
Posté le 22-06-2006 à 02:11:10  profilanswer
 

perso je me servais de

Code :
  1. ((DefaultTreeModel) tree.getModel()).reload(currentNode);


 
ou currentNode est le noeud de ton arbo sur lequel est basé l'évènement.
 
Sinon essaie de mettre un peu plus de code, parce que voir deux lignes... :o


---------------
Mon feedback
n°1392584
denebj
Posté le 22-06-2006 à 08:52:58  profilanswer
 

En faite voila comment sa marche :
J'ai une arboréscence d'un fichier XML que j'affiche avec un JTree. Ce Jtree se developpe selon le noeud, c'est à dire que je n'affiche que les premiers noeuds, et il se deroule lorsque l'utilisateur clique sur le noeud en question.
Pour faire simple, tout mon arbre est contenu dans des listeners (je ne charge pas toute l'arboréscence en mémoire). Il clique sur un noeud, il va charger ses fils.
 

Code :
  1. final  JTree tree = new JTree(top);
  2. Icon openIcon = new ImageIcon("plus.png" );
  3. Icon closedIcon = new ImageIcon("minus.png" );
  4. ((javax.swing.plaf.basic.BasicTreeUI) tree.getUI()).setExpandedIcon(openIcon);
  5. ((javax.swing.plaf.basic.BasicTreeUI) tree.getUI()).setCollapsedIcon(closedIcon);
  6. tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION);
  7. tree.setRootVisible(true);
  8. tree.setShowsRootHandles(false);
  9. tree.setCellRenderer(new Renderer());
  10. Editor ec = new Editor();
  11. tree.setCellEditor(ec);
  12. dtm = new DefaultTreeModel(top);
  13. tree.setModel(dtm);
  14. getContentPane().add(tree);
  15. tree.setEditable(false);
  16. //On utilise un listener sur notre arbre
  17.  test = new TreeSelectionListener() {
  18. public void valueChanged(TreeSelectionEvent arg0)
  19. {....
  20. //Ici j'ai tout le code qui effectue le traitement sur le deroulement de l'arbre, recherche des fils selon, le noeud cliqué etc ...}


 
Pour l'instant j'ai fait sa pour le refresh :

Code :
  1. dispose();
  2. JFrame fii = new Arbo();
  3. tree.setEditable(false);
  4. fii.setVisible(true);


 
Ce code s'execute dans mon listener quand il clique sur un bouton (donc cela doit faire la mise à jour), ça fait ma mise à jour, j'ai pas trouvé mieux...
 
mais le probléme que cela pose est celui-ci :
Le truc c'est que j'effectue une mise à jour lorsque l'utilisateur clique sur des boutons de l'arbre, je dois donc recharger le fichier XML. Je le fais en faisant un dispose() et en relancant ma classe principal.
 
Mais le truc c'est que j'aimerais que lorsque mon programme se relance, il m'expand le chemin ou l'utilisateur a entré sa valeur. (En faite il entre une valeur, appuie sur un bouton, et hop ça relance le tout).
 
Mais comme tout mon arbre n'est pas chargé en mémoire, et qu'il est dans un listener je ne sais pas comment m'y prendre


Message édité par denebj le 22-06-2006 à 08:55:54

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

  Refresh JTree

 

Sujets relatifs
JTreejtree automatique
[J2ME] pb refresh lors du passage de page en pageAsp:reapeater + itemCommand : Comment on refresh ca ??
[C#] Refresh d'une form après changement de langueback et refresh
[ASP.NET] Mon éternel problem de refresh...[JSP] Cookie, refresh de page, ...
listview + refresh[c#] Refresh sur une form, récupération d'events impossible
Plus de sujets relatifs à : Refresh JTree


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