// Purpose. JTree, TreeExpansionListener, TreeSelectionListener, TreePath demo import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; public class JTreeDemo { public static void main( String[] args ) { JFrame frame = new JFrame( "JTree listeners demo" ); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); frame.getContentPane().add( createTree() ); frame.pack(); frame.setVisible( true ); } public static JPanel createTree() { TreeNode root = buildTree( "top", 1, 1 ); JTree tree = new JTree( new DefaultTreeModel(root) ); tree.addTreeExpansionListener( new TreeExpansionListener() { public void treeExpanded( TreeExpansionEvent e ) { System.out.println( "xpanded --- " + expandPath(e.getPath()) ); } public void treeCollapsed( TreeExpansionEvent e ) { System.out.println( "collapsed - " + expandPath(e.getPath()) ); } } ); tree.addTreeSelectionListener( new TreeSelectionListener() { public void valueChanged( TreeSelectionEvent e ) { // on a collapse req, ignore the event coming from the current child if ( ! e.isAddedPath()) return; System.out.println( "selected -- " + expandPath(e.getPath()) ); } } ); JScrollPane tScroll = new JScrollPane( tree ); tScroll.setPreferredSize( new Dimension(250,200) ); JPanel tPanel = new JPanel(); tPanel.add( tScroll ); return tPanel; } public static DefaultMutableTreeNode buildTree(String s, int num, int level){ DefaultMutableTreeNode t = new DefaultMutableTreeNode( s + num ); String str = (s.equals("top") ? "" : s) + num; if ((num % 2 == 1) && (level < 4)) for (int i = 0; i < 6; i++) t.add( buildTree( str, i, level+1 ) ); return t; } private static String expandPath( TreePath e ) { Object[] parts = e.getPath(); StringBuffer sb = new StringBuffer(); for (int i=0; i < parts.length; i++) sb.append( parts[i] + "." ); sb.setLength( sb.length() - 1 ); return sb.toString(); } } // xpanded --- top1.15 // xpanded --- top1.15.151 // selected -- top1.15.151.1511 // collapsed - top1.15.151 // selected -- top1.15.151 // collapsed - top1.15 // selected -- top1.15 // selected -- top1.13 // xpanded --- top1.13