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

📄 filetree.java

📁 Java实现的图片阅览程序
💻 JAVA
字号:

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.io.*;

/*
  构造函数要求提供被调用的JFrame参数
  完成文件树型结构
 */
public class FileTree extends JTree {
	
	public FileTree(MyFrame f) {
		
		super((TreeModel)null);			
		putClientProperty("JTree.lineStyle", "Angled");
		
		File[] drives=File.listRoots();		//获取驱动器文件
		
		frame=f;		//得到父Frame
 		
		DefaultMutableTreeNode rootNode=new DefaultMutableTreeNode("我的电脑"); 
		for(int i=1;i<drives.length;i++)		//将各驱动器添加入根节点
		{
			if(drives[i].isDirectory())
				rootNode.add(new FileTreeNode(null,drives[i].getPath()));
		}
	
		setModel(new DefaultTreeModel(rootNode));		//将根节点添加入文件树中

		addTreeExpansionListener(new TreeExpansionHandler());		//添加事件
		addTreeSelectionListener(new TreeSelectionHandler());
	}

	//获取文件路径
	public static String getPathName(TreePath path) {
		Object o = path.getLastPathComponent();
		if (o instanceof FileTreeNode) {
			return ((FileTreeNode)o).file.getAbsolutePath();
		}
		return null;
	}

	//获取文件
	public static File getFile(TreePath path) {
		Object o = path.getLastPathComponent();
		if (o instanceof FileTreeNode) {
			return ((FileTreeNode)o).file;
		}
		return null;
	}
	
	//自定义节点类
	protected static class FileTreeNode extends DefaultMutableTreeNode {
		public FileTreeNode(File parent, String name)
		{

			this.name = name;
			
			file = new File(parent, name);
			
			isDir = file.isDirectory();

			setUserObject(file);
		}

		public boolean isLeaf() {
			return !isDir;
		}

		public boolean getAllowsChildren() {
			return isDir;
		}

		public String toString() {			
			return name;
		}

		//展开节点
		boolean populateDirectories(boolean descend) {
			boolean addedNodes = false;

			if (populated == false) {
				if (interim == true) {
					
					removeAllChildren();
					interim = false;					
				}				
				
				String[] names = file.list();		
				
				for (int i = 0; i < names.length; i++) {
					String name = names[i];
					File d = new File(file, name);
					try {
						if (!d.isHidden()) {						
							if(d.isDirectory()){
								
								FileTreeNode node = new FileTreeNode(file, name);
								this.add(node);
								
								if (descend) {
									node.populateDirectories(true);
								}
								
								addedNodes = true;
								if (descend == false) {
									break;
								}
							}
							
						}
					} catch (Throwable t) {
		
					}					
				}
				
				if (descend == true || addedNodes == false) {
					populated = true;					
				} else {
					
					interim = true;					
				}
			}
			return addedNodes;
		}

		protected File file;		
		protected String name;		
		protected boolean populated;
		protected boolean interim;	
		protected boolean isDir;
		
	}

	protected class TreeExpansionHandler implements TreeExpansionListener {
		public void treeExpanded(TreeExpansionEvent evt) {		//展开节点事件
			TreePath path = evt.getPath();			
			JTree tree = (JTree)evt.getSource();	

			if(evt.getPath().toString().trim().compareTo("[我的电脑]")!=0)
			{
				FileTreeNode node = (FileTreeNode)path.getLastPathComponent();
				if (node.populateDirectories(true))
					((DefaultTreeModel)tree.getModel()).nodeStructureChanged(node);	
			}
		}

		public void treeCollapsed(TreeExpansionEvent evt) {
			//
		}
	}
	
	protected class TreeSelectionHandler implements TreeSelectionListener{
		public void valueChanged(TreeSelectionEvent evt){		//选择节点事件
			if(evt.getPath().toString().trim().compareTo("[我的电脑]")!=0)
				frame.FileChanged(FileTree.getFile(evt.getPath()));
		}
	}
	
	protected MyFrame frame;
}

⌨️ 快捷键说明

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