⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dirtree.java

📁 用java编写的IDE程序示例
💻 JAVA
字号:
/*
 * Created on 2004-5-31
 */
package yuchifang.javaIDE.util;

import java.io.File;
import java.io.FileFilter;
import java.util.List;
import java.util.Vector;

import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

/**
 * @author yuchifang
 */
public class DirTree extends JTree
{
  private DirNode root;
  
  public DirTree(File file)
  {
    root = new DirNode(file);
    setModel(new DefaultTreeModel(root));
    
    setRootVisible(false);//##不显示"我的电脑"节点
  }

  public void setAcceptedExtensions(List extensions)
  {
    root.setAcceptedExtensions(extensions);
  }
  
  public void addAcceptedExtension(String ext)
  {
    root.addAcceptedExtension(ext);
  }

  public void clearAcceptedExtensions()
  {
    root.clearAcceptedExtensions();
  }
  
  public void removeAcceptedExtension(String ext)
  {
    root.removeAcceptedExtension(ext);
  }
  
  public List getAcceptedExtensions()
  {
    return root.getAcceptedExtensions();
  }
}

class DirNode extends DefaultMutableTreeNode
{
  private File file;
  private int childCount;
  private boolean hasLoaded;
  
  private static List extensions = new Vector();
  
  public DirNode(File file)
  {
    this.file = file;
  }

  public boolean isLeaf()
  {
    if (file != null)
      return file.isFile();
    return false;
  }

  public String toString()
  {
    if (file != null)
    {
      if (file.getName().equals(""))
      {
        String s = file.getPath();
        if (s.endsWith("\\")) s = s.substring(0, s.length() - 1);
        return s;
      }
      return file.getName();
    }
    return "";
  }
  

  /**
   * 获取子节点数目,如果子节点尚未装载则装载之 
   */
  public int getChildCount()
  {
    if (!hasLoaded)
    {
      loadChilds();
      hasLoaded = true;
    }
    
    return childCount;
  }

  /**
   * 装载子节点
   */
  private void loadChilds()
  {
    if (file != null)
    {
      if (!file.isDirectory()) return;
      
      File[] files = file.listFiles(
                       new FileFilter()
                       {
                        public boolean accept(File f)
                        {
                          return f.isDirectory();
                        }
                       }
                     );
      for (int i = 0; i < files.length; i++)
      {
        insert(new DirNode(files[i]), childCount++);
      }
  
      files = file.listFiles(
                       new FileFilter()
                       {
                        public boolean accept(File f)
                        {
                          if (!f.isFile()) return false;
                          if (extensions.size() <= 0) return true;
                          for (int i=0; i<extensions.size(); i++) 
                          {
                             if (f.getName().endsWith((String)extensions.get(i)))
                               return true;
                          }
                          return false;
                        }
                       }
                     );
                     
      for (int i = 0; i < files.length; i++)
      {
        insert(new DirNode(files[i]), childCount++);
      }
    }//if (file != null)
    else
    {
      File[] files = File.listRoots();
      for (int i = 0; i < files.length; i++)
      {
        insert(new DirNode(files[i]), childCount++);
      } 
    }// else
  }

  void setAcceptedExtensions(List exts)
  {
    extensions = exts;
  }
  
  void addAcceptedExtension(String ext)
  {
    extensions.add(ext);
  }

  void clearAcceptedExtensions()
  {
    extensions.clear();
  }
  
  void removeAcceptedExtension(String ext)
  {
    extensions.remove(ext);
  }
  
  List getAcceptedExtensions()
  {
    return extensions;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -