// Purpose. JTree demo [source: Flanagan97b, p376] import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; // TreeModelListener import java.io.*; public class JTreeDirectory { public static void main( String[] args ) { TreeNode root = buildTree( new File( args[0] ) ); JTree tree = new JTree( new DefaultTreeModel( root ) ); tree.setEditable( true ); tree.getModel().addTreeModelListener( new TreeModelListener() { public void treeNodesChanged( TreeModelEvent e ) { Object[] children = e.getChildren(); System.out.println( children[0] ); } public void treeNodesInserted( TreeModelEvent e ) { } public void treeNodesRemoved( TreeModelEvent e ) { } public void treeStructureChanged( TreeModelEvent e ) { } } ); JFrame frame = new JFrame( "JTree recursive directory demo" ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); frame.getContentPane().add( new JScrollPane( tree ) ); frame.setSize( 300, 300 ); frame.setVisible( true ); } // This method recursively creates a hierarchy of TreeNode objects that // represent the files and subdirectories of the specified directory static DefaultMutableTreeNode buildTree( File f ) { DefaultMutableTreeNode node = new DefaultMutableTreeNode( f.getName() ); if (f.isDirectory()) { String[] list = f.list(); for (int i = 0; i < list.length; i++) node.add( buildTree( new File( f, list[i] ))); } return node; } }