http://expert.csdn.net/Expert/topic/1408/1408571.xml?temp=.4313166

解决方案 »

  1.   

    我自己写的,不过有问题。我用1.4编译的。
    你可以看看,参考一下。
    先写个类:
    class FileNode extends DefaultMutableTreeNode {
            private boolean explored = false;        public FileNode(File file)  {
                    setUserObject(file);
            }
            public boolean getAllowsChildren() { return isDirectory(); }
            public boolean isLeaf()  { return !isDirectory(); }
            public File getFile() { return (File)getUserObject(); }        public boolean isExplored() { return explored; }        public boolean isDirectory() {
                    File file = getFile();
                    return file.isDirectory();
            }
            public String toString() {
                    File file = (File)getUserObject();
                    String filename = file.toString();
                    int index = filename.lastIndexOf(File.separator);                return (index != -1 && index != filename.length()-1) ?
                                                                            filename.substring(index+1) :
                                                                            filename;
            }
            public void explore() {
                    if(!isDirectory())
                            return;                if(!isExplored()) {
                            File file = getFile();
                            File[] children = file.listFiles();                        for(int i=0; i < children.length; ++i)
                                    add(new FileNode(children[i]));                        explored = true;
                    }
            }
    }然后用下面的方法生成tree:private TreeModel createTreeModel() {
              disks = FileSystemView.getFileSystemView().getRoots();
              if(Array.getLength(disks)>1){
                    DefaultMutableTreeNode root;
                    root = new DefaultMutableTreeNode("My computer");
                    for(int i=0; i<Array.getLength(disks); i++){
                         FileNode diskNode = new FileNode(disks[i]);
                         //diskNode.explore();
                         root.add(diskNode);
                    }
                    return new DefaultTreeModel(root);
              }else{
                   FileNode root;
                   root = new FileNode(disks[0]);
                   return new DefaultTreeModel(root);
              }          //return new DefaultTreeModel(root);
      }主程序中再加上一句:final JTree tree = new JTree(createTreeModel());能不能给200分呀?
      

  2.   

    还有两段代码,上次忘了。
    tree.addTreeSelectionListener(new TreeSelectionListener() {
              public void valueChanged(TreeSelectionEvent e) {
                   DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                                                                                                                                             tree.getLastSelectedPathComponent();
                   if (node == null) return;
                   File nodeInfo = (File)node.getUserObject();
                   if (node.isLeaf()) {
                      wholeName = nodeInfo.toString();
                      gotImage = new ImageIcon(wholeName,wholeName);
                      picture.setIcon(gotImage);
                      picture.setPreferredSize(new Dimension(gotImage.getIconWidth(),
                                                                                                                                                                                             gotImage.getIconHeight() ));
                      picture.revalidate();
                      //System.out.println(nodeInfo);
                   }else{
                      dirName = nodeInfo.toString();
                      System.out.println(dirName);
                      File[] fileList = FileSystemView.getFileSystemView().getFiles(nodeInfo,true);
                      String temp;
                      String fileName[] = new String[Array.getLength(fileList)];
                      for(int i=0; i<Array.getLength(fileList); i++){
                         temp=fileList[i].toString();
                         //System.out.println(temp);
                         if(dirName.charAt(dirName.length()-1)!='\\'){
                             fileName[i]=temp.substring(dirName.length()+1);
                         }else{
                             fileName[i]=temp.substring(dirName.length());
                         }
                         //System.out.println(fileName[i]);
                      }
                      list.setListData(fileName);
                      //System.out.println(nodeInfo);
                   }
             }
         });     tree.addTreeExpansionListener(new TreeExpansionListener(){
             public void treeCollapsed(TreeExpansionEvent e) {}
             public void treeExpanded(TreeExpansionEvent e) {
                UpdateStatus updateThread;
                TreePath path = e.getPath();
                FileNode node = (FileNode)
                path.getLastPathComponent();            if( ! node.isExplored()) {
                    DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
                    status.setText("exploring ...");                UpdateStatus us = new UpdateStatus();
                    us.start();                node.explore();
                    model.nodeStructureChanged(node);
                }
            }