gambi01
Messages postés12Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention20 novembre 2007
-
28 mai 2007 à 15:41
gambi01
Messages postés12Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention20 novembre 2007
-
28 mai 2007 à 21:43
Bonjour,
J'ai un soucis pour remplir un JTree de façon récursive.
J'ai un tableau de 3 colonnes (index - libellé - index parent)
Exemple :
1, "Racine", 0
2, "Root1", 1
3, "Root1_1", 2
4, "Root1_2", 2
5, "Root1_2_1", 4
6, "Root1_2_2", 4
7, "Root1_2_2_1", 6
8, "Root1_3", 2
9, "Root3", 1
Voici un squelette de la fonction récursive que j'utilise.
public void ParcoursTableau(String [][] argTableau, int argi) {
if (argi == argTableau.length)
System.exit(1);
for (int i = argi; i < argTableau.length; ++i) {
for (int j = 0; j < argTableau.length; ++j) {
if (argi == 0){
System.out.println("Racine : " + argTableau[i][1]);
DefaultMutableTreeNode MyRacine = new DefaultMutableTreeNode(argTableau[i][1], true);
m_Tree = new JTree(MyRacine);
}
else if (argTableau[i][2] == "1"){
DefaultMutableTreeNode MyRoot = new DefaultMutableTreeNode(argTableau[i][1], true);
MyRacine.add(MyRoot); // Marche pas
System.out.println("Parent = Racine " + " Feuille : " + argTableau[i][1]);
}
else
System.out.println(" Feuille : " + argTableau[i][1]);
ParcoursTableau(argTableau, i + 1);
} // for (int j = 0; j < argTableau.length; ++j)
} // Fin for (int i = argi; i < argTableau.length; ++i)
} // Fin ParcoursTableau()
L'appel ce fait par :
ParcoursTableau(m_TreeRoot, 0);
// reste du code (SetSize - JScrollPane - getContentPane ....)
L'algorithme fonctionne bien, mais quand je remplace les "System.out" par l'utilisation de "DefaultMutableTreeNode", ça ne s'affiche pas.
En ne gardant que le if, j'arrive bien à afficher la racine.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 28 mai 2007 à 16:47
Salut,
tu peux t'inspirer de ça :
public static DefaultMutableTreeNode objects(Object[] objs) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode();
node = (DefaultMutableTreeNode)objs[0];
DefaultMutableTreeNode child;
for (int i = 1; i < objs.length; i++) {
Object specifier = objs[i];
if (specifier instanceof Object[])
child = objects((Object[]) specifier);
else{
child = new DefaultMutableTreeNode();
child = (DefaultMutableTreeNode)specifier;
}
node.add(child);
}
node.trimToSize();
return node;
}
Note : Les lignes en rouge sont super importante si tu veux séraliser/déserialiser ton DefaultMutableTreeNode elle permet d'éviter l'exception StackOverflowException
ici le tableau passé en parametre contient un nouveau tableau pour un nouveau noeur etc ... mais tu peux faculement faire la meme chose avec un list d'objets
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."