Charger un fichier text dans un JTree

Résolu
phenix40 Messages postés 12 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 26 juin 2010 - 25 juin 2010 à 12:41
phenix40 Messages postés 12 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 26 juin 2010 - 26 juin 2010 à 21:23
Salut tout le monde,
Je travail sur une petite application Java où je dois créer un JTree à partir d'un fichier texte dont la structure est la suivante:
==============
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
=============
Je doit mettre cette hiérarchie dans un object[] de cette façon:
Object[] hierarchy =
      { "noeud",
        new Object[] { "noeud",
                       "noeud"},
        "noeud",
        "noeud",
        new Object[] { "noeud",
                       "noeud",
        new Object[] { "noeud",
                       "noeud"}, "noeud" },
      ... };


c-à-d si la ligne commence par un espace elle doit être une instance d'un objet dans la ligne précédente.
puis créer un modèle de JTree à partir de cet objet.
Mon problème est:comment créer cet objet dynamiquement à partir d'un fichier texte ?


Phenix40

4 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
26 juin 2010 à 18:24
Essaie ceci:
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
public class TreeFromText extends JFrame {
    public TreeFromText() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("TreeFromText");
        setSize(400, 300);
        setLocationRelativeTo(null);
        DefaultMutableTreeNode root = null;
        try {
            root = parseText();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        JTree tree = new JTree(root);
        tree.setRootVisible(false);
        add(new JScrollPane(tree));
    }
    private DefaultMutableTreeNode parseText() throws IOException {
        DefaultMutableTreeNode root = null;
        List<Node> nodes = new ArrayList<Node>();
        BufferedReader reader = new BufferedReader(new FileReader("tree.txt"));
        String str = "root";
        while (!str.trim().equals("null")) {
            int level = getLevel(str);
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(str.trim());
            nodes.add(new Node(level, node));
            if (root == null) {
                root = node;
            } else {
                DefaultMutableTreeNode parent = Node.findParent(nodes, level);
                if (parent != null) {
                    parent.add(node);
                }
            }
            str = " " + reader.readLine();
        }
        return root;
    }
    private int getLevel(final String str) {
        int level = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != ' ') {
                level = i;
                break;
            }
        }
        return level;
    }
    public static void main(final String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TreeFromText().setVisible(true);
            }
        });
    }
}
class Node {
    private int level;
    private DefaultMutableTreeNode node;
    public Node(int level, DefaultMutableTreeNode node) {
        this.level = level;
        this.node = node;
    }
    public static DefaultMutableTreeNode findParent(final List<Node> nodes, final int level) {
        int numberOfNodes = nodes.size();
        for (int i = (numberOfNodes - 1); i >= 0; i--) {
            Node node = nodes.get(i);
            if (level > node.level) {
                return node.node;
            }
        }
        return null;
    }
}
3
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
26 juin 2010 à 07:40
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud

La structure est perdue: tous les noeuds sont au même niveau!
0
phenix40 Messages postés 12 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 26 juin 2010
26 juin 2010 à 10:02
Désolé, c'était un problème de mise en forme.
    noeud
     noeud
     noeud
      noeud
      noeud
    noeud
     noeud
      noeud
     noeud
    noeud 


C'est quelque chose comme ça, j'ai expliqué le principe, il y a des lignes qui se commence par des espaces selon le niveau.
Phenix40
0
phenix40 Messages postés 12 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 26 juin 2010
26 juin 2010 à 21:23
Merci. pour votre réponse- si rapide!- Vous m'avez sauvé.

Phenix40
0
Rejoignez-nous