Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1916 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JTree] lister une arborescence systeme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JTree] lister une arborescence systeme

n°571076
spitagor
Posté le 19-11-2003 à 20:53:06  profilanswer
 

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

mood
Publicité
Posté le 19-11-2003 à 20:53:06  profilanswer
 

n°571117
Krueger
tout salaire demande dutravail
Posté le 19-11-2003 à 21:59:57  profilanswer
 

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

n°571132
spitagor
Posté le 19-11-2003 à 22:45:36  profilanswer
 

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

n°571141
spitagor
Posté le 19-11-2003 à 23:06:19  profilanswer
 

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?

n°571145
Krueger
tout salaire demande dutravail
Posté le 19-11-2003 à 23:14:36  profilanswer
 

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:

n°571150
Krueger
tout salaire demande dutravail
Posté le 19-11-2003 à 23:19:24  profilanswer
 

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.

n°571247
spitagor
Posté le 20-11-2003 à 07:52:28  profilanswer
 

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 !!!  
 

n°572508
Krueger
tout salaire demande dutravail
Posté le 21-11-2003 à 14:14:07  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JTree] lister une arborescence systeme

 

Sujets relatifs
requete SQL lister les users d'un groupesystéme de news en utilisant le forum
Lister les fichiers (nom...) d'un repertoire sous windows en C++problème avec la commande systeme(" ")
[PHP] Passer une commande système unix en php.Lister les controles d'une feuille
[MySQL] lister des valeurs qui sont dans T1 mais pas dans T2[openGL] Probleme de systeme de coordonnées fenetre
Appel systeme sous unixSystème de couleurs personalisées avec JS compatible Mozilla [résolu]
Plus de sujets relatifs à : [JTree] lister une arborescence systeme


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)