Mega Code Archive

 
Categories / Java Tutorial / Swing
 

JTree Displaying the File System Hierarchy Using the Custom Tree Model

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);     }   } }