Voila j'expose le probleme
J'ai un JTree qui permet d'explorer un systeme de fichiers
Le noeud racine est le poste de travail
je l'affiche de manière a ce que l'Utilisateur puisse acceder aux partitions systemes et aux lecteurs de disque. par la je veux dire qu'il y a un petit "+" (handle) en face de chaque lecteur au debut
Maintenant il faut pouvoir lister les repertoires contenus dans ces lecteurs.
Pour ca il faut utiliser soit un TreeExpansionListener, soit un TreeSelectionLIstener (ce que j'ai fait)
Donc dans mon TreeSelectionListener, je veux simplement a partir du dossier courant (selectionné donc), lister la liste des sous dossiers de ce dossier.
Le problème c'est que le "+" s'affiche en meme temps que l'on clique sur le dossier (logique) donc on ne peux pas savoir si un dossier a des sous dossiers a moins de cliquer dessus! pas pratique du tout !
Pour pallier ce probleme j'ai fait un sous parcours qui parcours la liste des sous dossiers, liste leur sous dossiers pour chacun d'eux...ca c'est tres lourd et de plus ca créee deux fois plus de noeud qu'il n'en faut !!!
donc ma question est : Comment faire ca de maniere plus simple ?
J'ai pensé a une solution qui, pour chaque sous dossier, verifierait si il a des sous dossiers, mais je n'ai pas trouvé de methode qui permette d'afficher un "+" a coté d'un noeud.
Je me suis torturé les meninges et je me demande bien comment marche l'explorateur windows (il me faudrait les sources )
Voila en esperant ne pas vous avoir trop ennuyé
Si vous avez des idées/reflexions/critiques sur ma maniere de penser la chose, merci de me le dire !
Ci dessous en bonus le code implemantant l'ecouteur
Code :
- public class SelectionNoeud implements TreeSelectionListener {
-
- private Explorateur explo;
-
- public SelectionNoeud(Explorateur explo)
- {
- this.explo=explo;
- }
-
- public void valueChanged(TreeSelectionEvent e)
- {
- //recuperer le noeud courant
- DefaultMutableTreeNode noeudparent = (DefaultMutableTreeNode)explo.rep.getLastSelectedPathComponent();
-
- if (noeudparent == null)
- return;
-
- //en faire un fichier
- File fichnoeudparent =(File)noeudparent.getUserObject();
-
- //mettre à jour la Jlist avec la liste des elements du dossier courant
- explo.ihm.listefiles.listefichiers.setListData(fichnoeudparent.listFiles());//pas important ca
-
- //liste son contenu si c'est un repertoire
- if (fichnoeudparent.isDirectory())
- {
- File[] listesousrep=fichnoeudparent.listFiles();
-
- //on parcourt la liste des enfants
- for (int j = 1 ; j<listesousrep.length ; j++)
- {
- //on ne garde que les repertoires
- if (listesousrep[j].isDirectory())
- {
-
- //on cree un noeud
- DefaultMutableTreeNode noeudsousrep=new DefaultMutableTreeNode(listesousrep[j]);
-
- //et on l'ajoute au parent
- noeudparent.add(noeudsousrep);
-
- //on recupere le file associé au noeud
- File fichnoeudsousrep =(File)noeudsousrep.getUserObject();
-
- //... et on liste son contenu si c'est un repertoire
- if (fichnoeudparent.isDirectory())
- {
- File[] listfichnoeudsousrep=fichnoeudsousrep.listFiles();
-
- //parcours des sous sous repertoires pour faire apparaitre la croix
- for(int k=1;k<listfichnoeudsousrep.length;k++) {
- if (listfichnoeudsousrep[k].isDirectory())
- {
- noeudsousrep.add(new DefaultMutableTreeNode(listfichnoeudsousrep[k]));
- }
- }
- }
- }
- }
- }
- }
- }
|
Message édité par spitagor le 21-11-2003 à 11:55:58