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 :
- final JTree tree = new JTree(top);
- Icon openIcon = new ImageIcon("plus.png" );
- Icon closedIcon = new ImageIcon("minus.png" );
- ((javax.swing.plaf.basic.BasicTreeUI) tree.getUI()).setExpandedIcon(openIcon);
- ((javax.swing.plaf.basic.BasicTreeUI) tree.getUI()).setCollapsedIcon(closedIcon);
- tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION);
- tree.setRootVisible(true);
- tree.setShowsRootHandles(false);
- tree.setCellRenderer(new Renderer());
- Editor ec = new Editor();
- tree.setCellEditor(ec);
- dtm = new DefaultTreeModel(top);
- tree.setModel(dtm);
- getContentPane().add(tree);
- tree.setEditable(false);
- //On utilise un listener sur notre arbre
- test = new TreeSelectionListener() {
- public void valueChanged(TreeSelectionEvent arg0)
- {....
- //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 :
- dispose();
- JFrame fii = new Arbo();
- tree.setEditable(false);
- 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