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; } }
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud
noeud noeud noeud noeud noeud noeud noeud noeud noeud noeud