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());
......
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
				 }
			 }
		 }
	}
..........
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.

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:

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");
		 }
Des suggestions pour qu'ils n'apparaissent pas dés la génération de l'arborescence ?

Merci !