ARBORESCENCE DISQUE TRIEE AVEC JTREE

zegamemaster Messages postés 27 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 14 avril 2005 - 30 mars 2004 à 12:48
mzhunix Messages postés 18 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 2 février 2009 - 21 avril 2008 à 11:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/18280-arborescence-disque-triee-avec-jtree

mzhunix Messages postés 18 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 2 février 2009
21 avril 2008 à 11:05
Bonjour,
solution pour le problème relevé par yannickdh.

il faut ajouter un attribut "IsFirstExpanded" de type boulean à la classe FSNode qui sera à false par défaut et qu'on mettra à true lors à la fin de l'évenement "Expansion".
tester ensuite cette attribut dans au début de l'événement "Expansion" : si true ne rien faire sinon faire les appels nécessaire.

je n'ai vu tout le code, donc je vous ai donné ici la marche à suivre pour.
Bon courage.
Thiouwz03 Messages postés 3 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 14 juin 2006
12 juin 2006 à 15:26
Salut tout le monde, merci pour ton code FredRaid, ca me fait gagner beacoup de temps.
En effet je découvre aujourd'hui les JTree :)
Bon, je me suis cassé la tête sur le problème du lecteur de disquette, alors l'endroit ou l'exception peut être détectée est dans addFolder lorsque l'on fait listFiles sur driveOrDir :
fileList = driveOrDir.listFiles();

vous verez dans la doc, listFiles est sensé levé une SecurityException "SI" un SecurityManager est présent, et voila le problème, je n'arrive pas à un créer un.

Sinon, pour le bug relevé par Aishu sur l'Expension, il suffit de tester dans addFolder si le noeud a déjà des fils ou non :

private void addFolder(File driveOrDir, DefaultMutableTreeNode node, int level) {
File[] fileList;
fileList = driveOrDir.listFiles();

if (fileList != null) {
sortFiles(fileList); // on tri les elements
}

// on ne cherche pas plus loin que le niveau maximal définit
if (level > MAX_LEVEL - 1) {return;}
// pour chaque élément
if (node.getChildCount() == 0) {
try {
for (int i = 0; i < fileList.length; i++) {
// en fonction du type d'élément
if (fileList[i].isDirectory()) {
// si c'est un répertoire on créé un nouveau noeud
FSNode dir = new FSNode(fileList[i].getName(), fileList[i]);
node.add(dir);
// on recherche les éléments (récursivité)
addFolder(fileList[i], dir, ++level);
}
if (fileList[i].isFile()) {
// si c'est un fichier on ajoute l'élément au noeud
node.add(new FSNode(fileList[i].getName(), fileList[i]));
}
}
}
catch (NullPointerException e) {
// rien
}
}
mandark Messages postés 16 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 10 mai 2006
11 mars 2006 à 12:54
Super code !
Mais j'ai un bug ...
Je suis sur un portable qui à un lecteur de cartes mémoires qui vous l'aurez devinné n'a pas forcément une carte mémoire dedans :X
Donc quand le programme liste les roots il tombe dessus et me lance le message windaube "Il n'y a pas de disque dans le lecteur. Insérez un disque dans le lecteur K:"
J'ai essayé de mettre un "if(drive[i].canRead()){" mais il me lance le message au moment du il fait son canRead donc je ne sais pas comment tester ca ...

Donc -1 pour "bug non géré" ca faut 9 ! (o;
yannickdh Messages postés 1 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 16:04
tres bien le code,c vrai que c'est le plus rapide, mais auriez vous la solution a mettre dans collapsed pour supprimer les noeuds une fois que l'on referme? merci beaucoup
cs_aishu Messages postés 17 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 24 août 2004
9 juin 2004 à 14:09
Bien ton code, d'ailleurs c'est le meilleur que j'ai trouvé... Mais malgré tout il y a un petit problème... Au moment de faire ton Expansion, tu ajoute le noeud et le probleme est que si tu fais plusieurs Expansion sur un même noeud, tu verra que les sous fichiers apparaisent autant de fois que tu as fais d'Expansion...Il faudrait peut-être faire un remove (tte l'opération en sens inverse : à chaque fois que tu fais un treeCollapsed, tu supprime les fichiers ajoutés) Ca pourrait être une solution... En vois tu une autre plus efficace ?? Ca me rendrait bien service... Merci !!
zegamemaster Messages postés 27 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 14 avril 2005
30 mars 2004 à 12:48
Je sais pas qui a mis deux comme note, mais moi, je trouve ca cool, ca m'a bien aider pour en faire une d'ailleur, j'ai aps encore bien tester remarque, mais a premiere vue, ca a l'air bien et rapide.
Rejoignez-nous