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