JTree Displaying the File System Hierarchy Using the Custom Tree Model : JTree File « Swing « Java Tutorial






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

  }
}








14.70.JTree File
14.70.1.JTree Displaying the File System Hierarchy Using the Custom Tree ModelJTree Displaying the File System Hierarchy Using the Custom Tree Model