Java Tutorial/Swing/JTree File

Материал из Java эксперт
Перейти к: навигация, поиск

JTree Displaying the File System Hierarchy Using the Custom Tree Model

   <source lang="java">

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

}</source>