放在JAVA安装目录\demo\jfc\SampleTree下

解决方案 »

  1.   

    以TreeModel构造JTree.
       除了以节点的观念(TreeNode)建立树之外,你可以用data model的模式建立树。树的data model称为TreeModel,用此模式的好处
    是可以触发相关的树事件,来处理树可能产生的一些变动。TreeModel是一个interface,里面定义了8种方法;如果你是一个喜欢自己
    动手做的人,或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出JTree.TreeModel界面
    的方法如下所示:
    TreeModel方法:
    void      addTreeModelListener(TreeModelListener l):增加一个TreeModelListener来监控TreeModelEvent事件。
    Object    getChild(Object parent,int index):返回子节点。
    int       getChildCount(Object parent):返回子节点数量.
    int       getIndexOfChild(Object parent,Object child):返回子节点的索引值。
    Object    getRoot():返回根节点。
    boolean   isLeaf(Object node):判断是否为树叶节点。
    void      removeTreeModelListener(TreeModelListener l):删除TreeModelListener。
    void      valueForPathChanged(TreePath path,Object newValue):当用户改变Tree上的值时如何应对。   你可以实作出这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这样做,毕竟要实作出这8种方法不
    是件很轻松的事,而且java本身也提供了一个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许
    多实用的方法。利用这个默认模式,我们便能很方便的构造出JTree出来了。下面为DefaultTreeModel的构造函数与范例:
    DefaultTreeModel构造函数:
    DefaultTreeModel(TreeNode root):建立DefaultTreeModel对象,并定出根节点。
    DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):建立具有根节点的DefaultTreeModel对象,并决定此节点是否允
                           许具有子节点。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import com.incors.plaf.alloy.*;//组件的下载网址http://www.incors.com/lookandfeel/
    /*将alloy.jar放在c:\j2sdk1.4.0\jre\lib\ext\目录下.
     */
    public class TreeDemo3
    {
        public TreeDemo3()
        {
            JFrame f = new JFrame("TreeDemo");
            Container contentPane = f.getContentPane();
            
            
            DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器");
            DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("我的公文包");
            DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的电脑");
            DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夹");
            DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme");
            
            DefaultTreeModel treeModel = new DefaultTreeModel(root);        /*DefaultTreeModel类所提供的insertNodeInto()方法加入节点到父节点的数量.
             *利用DefaultMutableTreeNode类所提供的getChildCount()方法取得目前子节点的数量.
             */
            treeModel.insertNodeInto(node1, root, root.getChildCount());
            treeModel.insertNodeInto(node2, root, root.getChildCount());
            treeModel.insertNodeInto(node3, root, root.getChildCount());
            treeModel.insertNodeInto(node4, root, root.getChildCount());
            
            DefaultMutableTreeNode leafnode = new 
                    DefaultMutableTreeNode("公司文件");        //DefaultTreeModel类所提供的insertNodeInto()方法加入节点到父节点的数量.
            treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
            leafnode = new DefaultMutableTreeNode("个人信件");
            treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
            leafnode = new DefaultMutableTreeNode("私人文件");
            treeModel.insertNodeInto(leafnode, node1, node1.getChildCount());
            
            leafnode = new DefaultMutableTreeNode("本机磁盘(C:)");
            treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
            leafnode = new DefaultMutableTreeNode("本机磁盘(D:)");
            treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
            leafnode = new DefaultMutableTreeNode("本机磁盘(E:)");
            treeModel.insertNodeInto(leafnode, node2, node2.getChildCount());
            
            DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("网站列表");
            treeModel.insertNodeInto(node31, node3, node3.getChildCount());
            leafnode = new DefaultMutableTreeNode("奇摩站");
            treeModel.insertNodeInto(leafnode, node3, node3.getChildCount());
            leafnode = new DefaultMutableTreeNode("职棒消息");
            treeModel.insertNodeInto(leafnode, node3, node3.getChildCount());
            leafnode = new DefaultMutableTreeNode("网络书店");
            treeModel.insertNodeInto(leafnode, node3, node3.getChildCount());
            try {
               LookAndFeel alloyLnF = new AlloyLookAndFeel();    
               UIManager.setLookAndFeel(alloyLnF);
            } catch (UnsupportedLookAndFeelException ex) {
            // You may handle the exception here
            }
             // this line needs to be implemented in order to make JWS work properly
              UIManager.getLookAndFeelDefaults().put("ClassLoader", getClass().getClassLoader());
            
            //以TreeModel建立JTree。
            JTree tree = new JTree(treeModel);
            /*改变JTree的外观**/
              tree.putClientProperty("JTree.lineStyle","Horizontal");
            /*改变JTree的外观**/
            JScrollPane scrollPane = new JScrollPane();
            scrollPane.setViewportView(tree);
            
            contentPane.add(scrollPane);
            f.pack();
            f.setVisible(true);
            
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });    }    public static void main(String args[]) {
        
            new TreeDemo3();
        }
    }
      

  2.   

    谢谢,能不能不用这个呢?import com.incors.plaf.alloy.*;//组件的下载网址
      

  3.   

    我写的,用一个递归就OK了,记得给分哦
    import java.io.*;
    import javax.swing.JFrame;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.JScrollPane;
    import java.util.Vector;
    import java.util.ArrayList;
    import java.util.Arrays;public class BrowseDir {
      public File file = null;
      static public String filePath = "f:/接收/mp3";
      String tmpFilePath = null;
      JFrame f = null;
      DefaultMutableTreeNode root = null;
      DefaultTreeModel treemodel = null;
      BrowseDir() {
        JTree tree = new JTree();
        root = new DefaultMutableTreeNode("文件目录");
        listFile(filePath, root); //生成目录树
        treemodel = new DefaultTreeModel(root);
        tree.setModel(treemodel);
        JScrollPane spn = new JScrollPane(tree);
        System.out.println("OK");
        f = new JFrame("File tree");
        f.getContentPane().add(spn);
        f.setSize(300, 400);
        f.show();    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }  public static void main(String[] args) {
        BrowseDir bsd = new BrowseDir();
      }  public String[] listFile(String filepath, DefaultMutableTreeNode treenode) {
        file = new File(filepath);
        if (!file.exists()) {
          System.out.println("file not exists!");
        }
        String[] filenameArray = null;
        filenameArray = file.list();
        filenameArray = sortDir2file(filenameArray, filepath); //文件排序
        for (int i = 0; i < filenameArray.length; i++) {
         //  System.out.println(filenameArray[i]);
          DefaultMutableTreeNode tmpnode = new DefaultMutableTreeNode(filenameArray[
              i]);
          treenode.add(tmpnode);
          tmpFilePath = filepath + File.separator + filenameArray[i];
          File tmpFile = new File(tmpFilePath);
          if (tmpFile.isDirectory()) {
            listFile(tmpFilePath, tmpnode);
          }
          //System.out.println(i);
        }
        return filenameArray;
      }  public String[] sortDir2file(String[] files, String filepath) {
        Vector dir = new Vector();
        Vector file = new Vector();
        String[] dirs = null;
        String[] tfiles = null;
        String fullpath = null;
        File tmpFile = null;
        for (int i = 0; i < files.length; i++) {
          fullpath = filepath + File.separator + files[i];
          tmpFile = new File(fullpath);
          if (tmpFile.isDirectory()) {
            dir.addElement(files[i]);
          }
          else {
            file.addElement(files[i]);
          }
        }
        if (dir.size() > 0) {
          dirs = new String[dir.size()];
          dir.copyInto(dirs);
          Arrays.sort(dirs);
        }
        if (file.size() > 0) {
          tfiles = new String[file.size()];
          file.copyInto(tfiles);
          Arrays.sort(tfiles);
        }
        if (dirs != null && dirs.length > 0) {
          for (int i = 0; i < dirs.length; i++) {
            files[i] = dirs[i];
          }
        }
        if (tfiles != null && tfiles.length > 0) {
          for (int i = 0; i < tfiles.length; i++) {
            if (dirs != null && dirs.length > 0) {
              files[dirs.length + i] = tfiles[i];
            }
            else {
              files[i] = tfiles[i];
            }
          }
        }    return files;
      }}
      

  4.   

    呵呵,我最近一直在坐树。
    有无数的树的例子。
    下面是扩展TreeModel来生长树的例子。
    import javax.swing.*;
    import javax.swing.tree.*; public class InfiniteBinaryTree implements TreeModel { public Object getRoot()  {
    return new Integer(1); // start at node number 1
    } public int getChildCount(Object parent)  { 
    return 2; // because its a binary tree
    } public Object getChild(Object parent, int index) {
    return new Integer(2 * valueOf(parent) + index); // the magic formula
    } public int getIndexOfChild(Object parent, Object child) {
    return valueOf(child) % 2; // odd number == first child, even == second
    } public boolean isLeaf(Object node) {
    return false; // an infinite number of internal nodes and no leaves!
    } // stubbed out methods not needed for display though for any real
    // application at least the listener methods should be implemented.
    public void addTreeModelListener(javax.swing.event.TreeModelListener l) {}
    public void removeTreeModelListener(javax.swing.event.TreeModelListener l) {}
    public void valueForPathChanged(TreePath path, Object newValue) {} // helper function
    private int valueOf(Object obj)  {
    return ((Integer)obj).intValue();
    }    
    /**
     * Creates a JTree from an InfiniteBinaryTree model and displays it.
     */
    public static void main(String args[])  {
    JTree binTree = new JTree(new InfiniteBinaryTree());
    binTree.setShowsRootHandles(true);
    JFrame frame = new JFrame("Infinite Binary Tree");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new JScrollPane(binTree));
    frame.setSize(new java.awt.Dimension(400, 400));
    frame.setVisible(true);
    }
    }