zegamemaster
Messages postés27Date d'inscriptionmardi 2 septembre 2003StatutMembreDernière intervention14 avril 2005
-
30 mars 2004 à 12:48
mzhunix
Messages postés18Date d'inscriptionlundi 14 janvier 2002StatutMembreDerniè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.
mzhunix
Messages postés18Date d'inscriptionlundi 14 janvier 2002StatutMembreDerniè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és3Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention14 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 :
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és16Date d'inscriptiondimanche 25 janvier 2004StatutMembreDernière intervention10 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és1Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention16 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és17Date d'inscriptionvendredi 7 mai 2004StatutMembreDernière intervention24 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és27Date d'inscriptionmardi 2 septembre 2003StatutMembreDernière intervention14 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.
21 avril 2008 à 11:05
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.
12 juin 2006 à 15:26
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
}
}
11 mars 2006 à 12:54
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;
16 juin 2004 à 16:04
9 juin 2004 à 14:09
30 mars 2004 à 12:48