[JTree] lister une arborescence systeme

lister une arborescence systeme [JTree] - Java - Programmation

Marsh Posté le 19-11-2003 à 20:53:06    

Voila je viens de m'apercevoir que les JTree c'est un peu le bord*** donc j'implore votre aide! enfin si vous voulez pas m'aider je vous force pas lol
 
 
Mon but est de créer un JTree qui va representer le systeme de fichier a la manière de l'explorateur windows
 
 
Mon probleme : Mon JTree est composé de File  
 
Je n'arrive pas a récuperer en quelque sorte le File courant (selectionné)
 
 
j'ai essayé ca :  
 

Code :
  1. public class Explorateur extends JPanel implements TreeExpansionListener
  2.    {
  3.       public File[] roots;
  4.       public JTree rep;
  5.      
  6.  
  7.        public Explorateur()
  8.       {
  9.      
  10.      
  11.      
  12.       // taille de la fenetre
  13.      
  14.          setSize(200,800);
  15.      
  16.       // on recupère les lecteurs
  17.          roots = File.listRoots();
  18.        
  19.      
  20.       // on définit notre premier noeud
  21.          DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Poste de travail",true);
  22.        
  23.          for (int i = 1 ; i<roots.length ; i++)
  24.          {
  25.          //On crée des noeuds pour les lecteurs  
  26.             DefaultMutableTreeNode lecteurs = new DefaultMutableTreeNode(roots[i]);
  27.                    
  28.          //On les ajoute au poste de travail
  29.             racine.add(lecteurs);
  30.          }
  31.      
  32.       //modele par defaut pour l'arbre
  33.      
  34.          DefaultTreeModel treemodel = new DefaultTreeModel(racine);
  35.      
  36.      
  37.       // Création du jtree
  38.          rep = new JTree(treemodel);
  39.      
  40.          rep.setSelectionModel(
  41.                 new DefaultTreeSelectionModel() {
  42.                });
  43.          rep.getSelectionModel().setSelectionMode
  44.             (TreeSelectionModel.SINGLE_TREE_SELECTION);//une seule selection possible
  45.      
  46.          rep.addTreeExpansionListener(this);
  47.      
  48.      
  49.      
  50.          rep.setSize(1000,500);
  51.      
  52.      
  53.      
  54.       //expension de l'arbre pour montrer tous les lecteurs (ex: C:\)
  55.          rep.expandRow(0);
  56.      
  57.       // on met le jtree dans un jscrollpane
  58.          JScrollPane scroll = new JScrollPane(rep);
  59.          scroll.setPreferredSize(new Dimension(150,700));
  60.          scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  61.      
  62.       // on ajoute notre jscrollpane
  63.          this.add(scroll);
  64.      
  65.      
  66.      
  67.        // Change les icones de l'arbre
  68.          DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
  69.          renderer.setLeafIcon(new ImageIcon("Last_Leaf.GIF" ));
  70.          rep.setCellRenderer(renderer);
  71.      
  72.      
  73.       /** detection changement sur l'arbre*/
  74.       }
  75.        public void treeExpanded(TreeExpansionEvent e)
  76.       {
  77.          DefaultMutableTreeNode parent = (DefaultMutableTreeNode)rep.getLastSelectedPathComponent();
  78.          if (parent == null)
  79.             return;
  80.      
  81.          File fichparent =(File)parent.getUserObject();
  82.          System.out.println(fichparent.getName());
  83.          File[] sousrep=fichparent.listFiles();
  84.        
  85.          for (int j = 1 ; j<sousrep.length ; j++)
  86.          {
  87.              
  88.             if (sousrep[j].isDirectory())
  89.             { 
  90.                parent.add(new DefaultMutableTreeNode(sousrep[j])); 
  91.                
  92.             }
  93.              
  94.          }
  95.      
  96.       }
  97.  
  98.        public void treeCollapsed(TreeExpansionEvent e)
  99.       {
  100.          ;
  101.       }
  102.  
  103.    }


 
 
Je lance le tree (je l'instancie a partir d'une autre classe)et ca fait rien quand je clike sur un lecteur.
 
 
 
Je pensais que le getUSerObject marcherait mais ... :(  
 
Si quelqu'un peut me donner une piste... merci d'avance

Reply

Marsh Posté le 19-11-2003 à 20:53:06   

Reply

Marsh Posté le 19-11-2003 à 21:59:57    

Quand tu cliques sur un lecteur tu le sélectionnes. -> TreeSelectionListener

Reply

Marsh Posté le 19-11-2003 à 22:45:36    

ok ... j'ai encore un petit probleme mais ca devrait marcher
 
le pb c ke c'est que quand je clique sur un noeaud que je sais si il y a des sous repertoires ou pas (si ya des sous repertoires ca affiche un "+" sinon non" ) alors qu'il faudrait que ca l'affiche avant

Reply

Marsh Posté le 19-11-2003 à 23:06:19    

A oui aussi une question : je veux creer un JTree composé uniquement de File. Seulement quand je l'affiche ca me met le chemein complet des repertoires. vu que je ne veux pas créer de node avec un

Code :
  1. new DefaultMutableTreeNode(sousrep[j].getName())


 existe il un moyen de n'afficher que le nom du fichier?

Reply

Marsh Posté le 19-11-2003 à 23:14:36    

Une première solution est de créer toute l'arborescence des TreeNode utilisables. Bien sûr, c'est la plus facile, mais la plus gourmande en mémoire.
Pour un système de fichiers il faut mieux créer l'arborescence de façon dynamique. Je n'ai jamais fait ça, mais tu pourrais utiliser une implémentation personalisée de TreeNode qui ne se remplit de ses fils qu'à la volée, lors de l'expansion de son arborescence. Avant elle est vide, mais sa méthode isLeaf retourne true si elle a des fils. Je ne sais pas si ça marche, mais j'espère que ça te mettra sur une piste. :hello:

Reply

Marsh Posté le 19-11-2003 à 23:19:24    

spitagor a écrit :

A oui aussi une question : je veux creer un JTree composé uniquement de File. Seulement quand je l'affiche ca me met le chemein complet des repertoires. vu que je ne veux pas créer de node avec un

Code :
  1. new DefaultMutableTreeNode(sousrep[j].getName())


 existe il un moyen de n'afficher que le nom du fichier?


 
Quand le noeud de ton objet File est affiché, ce qui est affiché correspond à la chaîne renvoyée par la méthode toString. Donc il te faut un objet contenant cet objet File et dont la méthode toString retourne la bonne chaîne.

Reply

Marsh Posté le 20-11-2003 à 07:52:28    

ok ya pas moyen de le faire directement donc...
 
merci!
 
Pour l'arborescence en recursif, j'ai deja donné ca met a peu pres 1 minute pour lancer le programme !!!  
 

Reply

Marsh Posté le 21-11-2003 à 14:14:07    

Je crois qu'il vaut mieux que tu le fasses de façon dynamique dès que possible, comme je te l'avais suggéré. Ça évitera entre autres à ton programme de bouffer trop de mémoire. C'est bien comme ça que marche l'explorateur Windows il me semble.

Reply

Sujets relatifs:

Leave a Replay

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