package MyTest;
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.event.*;
import java.io.*;public class TreeTest {
    private JFrame frame = new JFrame();
    private MyTreeModel treeModel = new MyTreeModel();
    private JTree  tree = new JTree(treeModel)
    {
        public String convertValueToText(Object value,boolean s,
                                        boolean e, boolean l,
                                        int r, boolean h)
                                        {
                                            return ((File)value).getName();
                                        }
    };    public TreeTest() {
        frame.getContentPane().add(tree);
        String osname = System.getProperty("os.name");
        if(osname.startsWith("Windows"))
        {
            tree.setRootVisible(false);
        }
        else
        {
            tree.setRootVisible(true);
        }
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosed(WindowEvent e)
            {
                System.exit(0);
            }
        })  ;
        frame.pack();
        frame.show();
    }    public static void main(String[] args) {
        TreeTest treetest = new TreeTest();
    }
}
package MyTest;
import javax.swing.tree.*;
import java.io.*;
import java.util.*;
import javax.swing.event.*;public class MyTreeModel implements TreeModel {
    String root = "/";//System.getProperty("user.home");
    File rootFile = new File(root);
    boolean flag = true;
    Vector listener = new Vector();
    FileFilter filter = new FileFilter(){
        public boolean accept(File path)
        {
            return !path.isHidden();
        }
    };    public MyTreeModel() {
         String osname = System.getProperty("os.name");
         if(!osname.startsWith("Windows"))
         {
             flag = false;
         }
         else
         {
             flag = true;
         }
    }
    public void addTreeModelListener(TreeModelListener l)
    {
        if(listener != null && l != null)
        {
            listener.add(l);
        }
    }
    public void removeTreeModelListener(TreeModelListener l)
    {
        if(listener != null && listener.isEmpty() && listener.contains(l))
        {
            listener.remove(l);
        }
    }    public Object getRoot()
    {
        return rootFile;
    }    public Object getChild(Object parent,int index)
    {
        if(parent != null)
        {   File child[];
            if(rootFile.equals((File)parent))
            {
                child = ((File)parent).listRoots();
            }
            else
            {
                child = ((File)parent).listFiles(filter);
            }
            if(index < child.length)
            {
                return child[index];
            }
            else
            {
                return null;
            }
        }
        else
        {
            return null;
        }
    }    public int getChildCount(Object parent)
    {
        if(parent != null)
        {
            File[] child;// = ((File)parent).listFiles();
            if(rootFile.equals((File)parent))
            {
                child = ((File)parent).listRoots();
            }
            else
            {
                child = ((File)parent).listFiles(filter);
            }
            return child.length;
        }
        else
        {
            return 0;
        }
    }    public int getIndexOfChild(Object parent, Object ch)
    {
        if(parent != null && ch != null)
        {
            if(((File)parent).isFile())
            {
                return -1;
            }
            File[] child;// = ((File)parent).listFiles();
            if(rootFile.equals((File)parent))
            {
                child = ((File)parent).listRoots();
            }
            else
            {
                child = ((File)parent).listFiles(filter);
            }
            for(int i=0;i<child.length;++i)
            {
                if(child[i].equals((File)ch))
                {
                    return i;
                }
            }
        }
        else
        {
            return -1;
        }
        return -1;
    }    public boolean isLeaf(Object node)
    {
        if(node != null)
           return ((File)node).isFile();
        else
        {
            return false;
        }
    }    public void valueForPathChanged(TreePath tp,Object newValue)
    {
    }}这段代码可以运行,但是有问题:
1:每次运行时,不知道为什么,都一直读软驱(读光驱时也有问题,请问怎么处理?)
2:运行后没有盘符的名称.怎么办?