import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.tree.TreeSelectionModel;
import java.net.URL;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;

public class TreeDemo extends JFrame {
    private JEditorPane htmlPane;

    public TreeDemo() {
        super("TreeDemo");

        DefaultMutableTreeNode top = new DefaultMutableTreeNode("TOP");
        createNodes(top);

        final JTree tree = new JTree(top);
        tree.getSelectionModel().setSelectionMode
                (TreeSelectionModel.SINGLE_TREE_SELECTION);

        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                                   tree.getLastSelectedPathComponent();

                if (node == null) return;

                Object nodeInfo = node.getUserObject();
		if (node.isLeaf()) {
		    System.out.println("Leaf node " + node);
		} else {
		    System.out.println("Non-leaf node " + node);
		}
            }
        });

        JScrollPane treeView = new JScrollPane(tree);
        Dimension minimumSize = new Dimension(100, 50);
        treeView.setMinimumSize(minimumSize);
        getContentPane().add(treeView, BorderLayout.CENTER);
    }

    private void createNodes(DefaultMutableTreeNode top) {
        DefaultMutableTreeNode root = null;
        DefaultMutableTreeNode n, m;

	root = new DefaultMutableTreeNode("ROOT");
        top.add(root);
	n = new DefaultMutableTreeNode("A");
	root.add(n);
	n = new DefaultMutableTreeNode("B");
	root.add(n);
	n = new DefaultMutableTreeNode("C");
	root.add(n);
	m = new DefaultMutableTreeNode("X");
	n.add(m);
	m = new DefaultMutableTreeNode("Y");
	n.add(m);
	m = new DefaultMutableTreeNode("Z");
	n.add(m);
	n = new DefaultMutableTreeNode("D");
	root.add(n);
    }

    public static void main(String[] args) {
        JFrame frame = new TreeDemo();
 
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });  
 
        frame.pack();
        frame.setVisible(true);
    }
}
