Charger un fichier text dans un JTree [Résolu]

phenix40 14 Messages postés dimanche 12 janvier 2003Date d'inscription 26 juin 2010 Dernière intervention - 25 juin 2010 à 12:41 - Dernière réponse : phenix40 14 Messages postés dimanche 12 janvier 2003Date d'inscription 26 juin 2010 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 26 juin 2010 à 18:24
3
Merci
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;
    }
}

Merci uhrand 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de uhrand
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 26 juin 2010 à 07:40
0
Merci
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud

La structure est perdue: tous les noeuds sont au même niveau!
Commenter la réponse de uhrand
phenix40 14 Messages postés dimanche 12 janvier 2003Date d'inscription 26 juin 2010 Dernière intervention - 26 juin 2010 à 10:02
0
Merci
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
Commenter la réponse de phenix40
phenix40 14 Messages postés dimanche 12 janvier 2003Date d'inscription 26 juin 2010 Dernière intervention - 26 juin 2010 à 21:23
0
Merci
Merci. pour votre réponse- si rapide!- Vous m'avez sauvé.

Phenix40
Commenter la réponse de phenix40

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.