Traverse Tree
/* Definitive Guide to Swing for Java 2, Second Edition By John Zukowski ISBN: 1-893115-78-X Publisher: APress */ import javax.swing.*; import javax.swing.event.*; import javax.swing.tree.*; import java.awt.*; import java.util.*; public class TraverseTree { public static void main(String args[]) { JFrame frame = new JFrame("Traverse Tree"); Object footballNodes[] = { "Giants", "Jets", "Bills" }; Vector footballVector = new NamedVector("Football", footballNodes); Object newYorkNodes[] = { "Mets", "Yankees", "Rangers", footballVector }; Vector newYorkVector = new NamedVector("New York", newYorkNodes); Object bostonNodes[] = { "Red Sox", "Celtics", "Bruins" }; Vector bostonVector = new NamedVector("Boston", bostonNodes); Object denverNodes[] = { "Rockies", "Avalanche", "Broncos" }; Vector denverVector = new NamedVector("Denver", denverNodes); Object rootNodes[] = { newYorkVector, bostonVector, denverVector }; Vector rootVector = new NamedVector("Root", rootNodes); JTree tree = new JTree(rootVector); tree.setRootVisible(true); TreeModel model = tree.getModel(); Object rootObject = model.getRoot(); if ((rootObject != null) && (rootObject instanceof DefaultMutableTreeNode)) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) rootObject; // printDescendents(root); Enumeration breadth = root.breadthFirstEnumeration(); Enumeration depth = root.depthFirstEnumeration(); Enumeration preOrder = root.preorderEnumeration(); printEnumeration(breadth, "Breadth"); // printEnumeration(depth, "Depth"); // printEnumeration(preOrder, "Pre"); } TreeSelectionListener treeSelectionListener = new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent treeSelectionEvent) { JTree treeSource = (JTree) treeSelectionEvent.getSource(); TreePath path = treeSource.getSelectionPath(); System.out.println(path); System.out.println(path.getPath()); System.out.println(path.getParentPath()); System.out.println(((DefaultMutableTreeNode) path .getLastPathComponent()).getUserObject()); System.out.println(path.getPathCount()); } }; tree.addTreeSelectionListener(treeSelectionListener); JScrollPane scrollPane = new JScrollPane(tree); frame.getContentPane().add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 400); frame.setVisible(true); } private static void printEnumeration(Enumeration e, String label) { System.out.println("-----" + label + "-----"); while (e.hasMoreElements()) { System.out.println(e.nextElement()); } } public static void printDescendents(TreeNode root) { System.out.println(root); Enumeration children = root.children(); if (children != null) { while (children.hasMoreElements()) { printDescendents((TreeNode) children.nextElement()); } } } } class NamedVector extends Vector { String name; public NamedVector(String name) { this.name = name; } public NamedVector(String name, Object elements[]) { this.name = name; for (int i = 0, n = elements.length; i < n; i++) { add(elements[i]); } } public String toString() { return "[" + name + "]"; } }