[JTree] TreeSelectionListener qui fait pas ce que je veux ...

TreeSelectionListener qui fait pas ce que je veux ... [JTree] - Java - Programmation

Marsh Posté le 21-11-2003 à 11:40:06    

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 :D )
 
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 :
  1. public class SelectionNoeud implements TreeSelectionListener {
  2.    
  3.       private Explorateur explo;
  4.    
  5.        public SelectionNoeud(Explorateur explo)
  6.       {
  7.          this.explo=explo;
  8.       }
  9.    
  10.        public void valueChanged(TreeSelectionEvent e)
  11.       {         
  12.          //recuperer le noeud courant
  13.          DefaultMutableTreeNode noeudparent = (DefaultMutableTreeNode)explo.rep.getLastSelectedPathComponent();
  14.      
  15.          if (noeudparent == null)
  16.             return;
  17.                        
  18.            //en faire un fichier
  19.          File fichnoeudparent =(File)noeudparent.getUserObject();
  20.        
  21.        //mettre à jour la Jlist avec la liste des elements du dossier courant
  22.          explo.ihm.listefiles.listefichiers.setListData(fichnoeudparent.listFiles());//pas important ca
  23.                    
  24.                     //liste son contenu si c'est un repertoire
  25.          if (fichnoeudparent.isDirectory())
  26.          {
  27.             File[] listesousrep=fichnoeudparent.listFiles();
  28.                    
  29.                      //on parcourt la liste des enfants
  30.             for (int j = 1 ; j<listesousrep.length ; j++)
  31.             {
  32.                         //on ne garde que les repertoires
  33.                if (listesousrep[j].isDirectory())
  34.                { 
  35.                          
  36.                            //on cree un noeud
  37.                   DefaultMutableTreeNode noeudsousrep=new DefaultMutableTreeNode(listesousrep[j]);
  38.                          
  39.                            //et on l'ajoute au parent
  40.                   noeudparent.add(noeudsousrep);
  41.                          
  42.                            //on recupere le file associé au noeud
  43.                   File fichnoeudsousrep =(File)noeudsousrep.getUserObject();
  44.                          
  45.                            //... et on liste son contenu si c'est un repertoire
  46.                   if (fichnoeudparent.isDirectory())
  47.                   {
  48.                      File[] listfichnoeudsousrep=fichnoeudsousrep.listFiles();
  49.                              
  50.                               //parcours des sous sous repertoires pour faire apparaitre la croix
  51.                      for(int k=1;k<listfichnoeudsousrep.length;k++)                           {
  52.                         if   (listfichnoeudsousrep[k].isDirectory())
  53.                         {               
  54.                            noeudsousrep.add(new DefaultMutableTreeNode(listfichnoeudsousrep[k]));
  55.                         }
  56.                      }
  57.                   }
  58.                }
  59.             }
  60.          }
  61.       }
  62.    }


 
 


Message édité par spitagor le 21-11-2003 à 11:55:58
Reply

Marsh Posté le 21-11-2003 à 11:40:06   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed