Java tutorial
import java.io.File; import java.util.Enumeration; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; public class CreatingTreeModel { public static void main(String[] a) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); FileSystemModel fileSystemDataModel = new FileSystemModel(); JTree tree = new JTree(fileSystemDataModel); JScrollPane scrollPane = new JScrollPane(tree); frame.add(scrollPane); frame.setSize(300, 200); frame.setVisible(true); } } class FileSystemModel implements TreeModel { private String root; // The root identifier private Vector listeners; // Declare the listeners vector public FileSystemModel() { root = System.getProperty("user.home"); File tempFile = new File(root); root = tempFile.getParent(); listeners = new Vector(); } public Object getRoot() { return (new File(root)); } public Object getChild(Object parent, int index) { File directory = (File) parent; String[] directoryMembers = directory.list(); return (new File(directory, directoryMembers[index])); } public int getChildCount(Object parent) { File fileSystemMember = (File) parent; if (fileSystemMember.isDirectory()) { String[] directoryMembers = fileSystemMember.list(); return directoryMembers.length; } else { return 0; } } public int getIndexOfChild(Object parent, Object child) { File directory = (File) parent; File directoryMember = (File) child; String[] directoryMemberNames = directory.list(); int result = -1; for (int i = 0; i < directoryMemberNames.length; ++i) { if (directoryMember.getName().equals(directoryMemberNames[i])) { result = i; break; } } return result; } public boolean isLeaf(Object node) { return ((File) node).isFile(); } public void addTreeModelListener(TreeModelListener l) { if (l != null && !listeners.contains(l)) { listeners.addElement(l); } } public void removeTreeModelListener(TreeModelListener l) { if (l != null) { listeners.removeElement(l); } } public void valueForPathChanged(TreePath path, Object newValue) { // Does Nothing! } public void fireTreeNodesInserted(TreeModelEvent e) { Enumeration listenerCount = listeners.elements(); while (listenerCount.hasMoreElements()) { TreeModelListener listener = (TreeModelListener) listenerCount.nextElement(); listener.treeNodesInserted(e); } } public void fireTreeNodesRemoved(TreeModelEvent e) { Enumeration listenerCount = listeners.elements(); while (listenerCount.hasMoreElements()) { TreeModelListener listener = (TreeModelListener) listenerCount.nextElement(); listener.treeNodesRemoved(e); } } public void fireTreeNodesChanged(TreeModelEvent e) { Enumeration listenerCount = listeners.elements(); while (listenerCount.hasMoreElements()) { TreeModelListener listener = (TreeModelListener) listenerCount.nextElement(); listener.treeNodesChanged(e); } } public void fireTreeStructureChanged(TreeModelEvent e) { Enumeration listenerCount = listeners.elements(); while (listenerCount.hasMoreElements()) { TreeModelListener listener = (TreeModelListener) listenerCount.nextElement(); listener.treeStructureChanged(e); } } }