Bonjour à tous !
Je suis en train de développer une Applet où je dois recréer sous forme de Jtree un explorateur ( les histoires de signatures sont déjà réglé ).
Premier problème :
Jusque là le contenu de l'ordinateur s'affiche normalement et j'arrive à parcourir mes dossiers sans problème, or si je déplie un nœud ( pour afficher le contenu d'un dossier ), que je le plie ( je cache ce contenu ) et que je re-déplie ce nœud ( je ré-ouvre le contenu, vous avez suivi ? ), les mêmes dossiers sont affichés mais en double.
J'ai donc deux \Program Files, deux \php, etc.
Voici le code, plus ou moins abrégé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 ........ root = new DefaultMutableTreeNode("Poste de travail"); File[] lecteurs = File.listRoots(); for (int i = 0; i < lecteurs.length; ++i){ DefaultMutableTreeNode nouveauLecteur = new DefaultMutableTreeNode(lecteurs[i].toString()); if (nouveauLecteur != null) { root.add(nouveauLecteur); } } treeModel = new DefaultTreeModel(root); tree = new JTree(treeModel); tree.addTreeSelectionListener(new ListenerNoeud()); ......Je pense que les dossiers se répètent car le TreeSelectionListener est appelé à chaque fois qu'un nœud est déplié, même si du contenu existe déjà dans le nœud à ouvrir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 ............. class ListenerNoeud implements TreeSelectionListener{ public void valueChanged(TreeSelectionEvent e){ DefaultMutableTreeNode lenoeud = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); if (lenoeud == null) return; developper(lenoeud); } } void developper(DefaultMutableTreeNode n) { // construction du chemin depuis la racine TreeNode[] paths = n.getPath(); String path = ""; //On prend le chemin du repertoire courant( mais on zappe "poste de travail" ) for (int i = 1; i < paths.length; i++){ if (paths[i].toString() != null){ path = path+"\\"+paths[i]; System.out.println(path); } } //Ce fichier est le repertoire courant File repertoire = new File(path.substring(1)); //On fait la liste des fichiers existants File[] fichiers = repertoire.listFiles(); if (fichiers == null) { System.out.println("Directory does not exist or is not a Directory"); }else{ int i = 0; for (File leFichier : fichiers){ System.out.println(leFichier.getName()); if(leFichier.isDirectory() && leFichier != null){ treeModel.insertNodeInto( new DefaultMutableTreeNode(leFichier.getName()), n, i); tree.expandPath( new TreePath(paths)); i++; }else if(leFichier.isFile()){ // a completer } } } } ..........
Alors mon idée est soit de détruire à chaque fermeture ce contenu, soit d'empêcher la réécriture de ce contenu si il existe déja. Comment faire ?
Deuxième problème, mais moindre :
Des dossiers qui a priori, n'existent pas, apparaissent malgré tout. Tels que Documents and Settings.
Ces dossiers font références au code déja vu:
Des suggestions pour qu'ils n'apparaissent pas dés la génération de l'arborescence ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 File[] fichiers = repertoire.listFiles(); if (fichiers == null) { System.out.println("Directory does not exist or is not a Directory"); }
Merci !
Partager