Bonjour ,
J'ai un problème à vous soumettre.
Je réalise actuellement un projet en Java.
Je dois développer une applet avec interface swing comprenant un Jtree, et d'autres partie.
J'ai déjà réussi à développer le tree, celui ci fonctionne correctement.
Le gros de l'interface est aussi préparé.
Par contre voila mon problème. Dans un soucis d'ergonomie, je voudrais bien permettre à mes utilisateurs de réaliser un expand all sur les répertoires dans l'arborescence du JTree.
J'ai donc regardé les exemples présent sur le site et j'ai réussi à réaliser qqch de presque fonctionnel. Malheureusement il y a des cas ou cela bug.
Lorsque je réalise un expand all sur un dossier ne contenant que des feuilles, celui-ci ne se réalise pas. C'est vrai que c'est peut-etre inutile à ce niveau, mais cela m'étonne quand même. Voici la partie du code qui gère l'expand all
Et voici l'endroit ou j'appelle la fonction dans mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //fonction permettant de réaliser l'expand all public void ouvrirTout(DefaultMutableTreeNode noeud) { if (noeud == null) return; for(int i=0; i<noeud.getChildCount(); i++) { ouvrirTout((DefaultMutableTreeNode) noeud.getChildAt(i)); tree.expandPath(new TreePath(((DefaultMutableTreeNode) noeud.getChildAt(i)).getPath())); } }
Je suis nouveau dans l'immense monde du java donc soyez indulgent si l'erreur est monumentale (pas taper )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 action = new AbstractAction() { public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode noeud = (DefaultMutableTreeNode) clickedPath.getLastPathComponent(); if (clickedPath==null)return; if (tree.isExpanded(clickedPath))fermerTout(noeud); else ouvrirTout(noeud); } };
L'intégration du popup menu sur clic droit de l'utilisateur fonctionne sans problème.
A l'inverse, ma fonction permettant de faire le collapse all ferme correctement les différents chemin, sauf les enfants direct au répertoire ou j'effectue le collpase.
Voici le code du collapse (qui est appelé juste dans le code ci dessus)
Si vous avez une idée......
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //fonction permettant de réaliser le collapse all public void fermerTout(DefaultMutableTreeNode noeud) { if (noeud == null) return; for(int i=0; i<noeud.getChildCount(); i++) { fermerTout((DefaultMutableTreeNode) noeud.getChildAt(i)); tree.collapsePath(new TreePath(((DefaultMutableTreeNode) noeud.getChildAt(i)).getPath())); } }
N'hésitez pas si il vous est nécessaire d'avoir une autre partie de mon code d'en faire la demande ^^
Je vous remercie d'avance.
Petit plus : Je pense à autre chose, comment pourrais-je réussir qu'au chargement de l'applet, le noeud root soit directement expand d'un cran ??
Merci
Partager