package cn.zyf.java树1116;
import java.awt.Desktop;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class TreeTest extends JFrame {
public static void main(String args[]) {
TreeTest tt = new TreeTest();
tt.init();
}
// 初始化窗口
public void init() {
// 设置窗体大小
this.setSize(800, 600);
// 设置窗体居中
this.setLocationRelativeTo(null);
// 初始化一个树节点对象
TreeNode tn = this.createTree();
// 添加至JTree
final JTree jt = new JTree(tn);
// 添加监听器
jt.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 如果右键点击,则打开文件
if(e.getButton()==e.BUTTON3){
if (e.getClickCount() == 1) {
TreePath tp = jt.getClosestPathForLocation(e.getX(),
e.getY());
String s = "";
// 从1开始循环,忽略"计算机"
for (int i = 1; i < tp.getPath().length; i++) {
s += "/"+tp.getPath()[i];
}
try {
Desktop.getDesktop().open(new File(s));
} catch (Exception ef) {
javax.swing.JOptionPane.showMessageDialog(null,
"无法打开指定的文件");
}
}
}
}
});
// 创建一个滚动条对象
JScrollPane jsp = new JScrollPane(jt);
this.add(jsp);
// 设置窗体关闭
this.setDefaultCloseOperation(3);
// 设置窗体可见
this.setVisible(true);
}
// 得到节点
public DefaultMutableTreeNode createTree() {
File file[] = File.listRoots();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("计算机");
for (int i = 0; i < file.length; i++) {
DefaultMutableTreeNode dtmn = new DefaultMutableTreeNode(file[i].getPath());
dtmn = createFile(dtmn, file[i]);
root.add(dtmn);
}
return root;
}
// 循环得到所有的文件
public static DefaultMutableTreeNode createFile(
DefaultMutableTreeNode root, File file) {
File fil[] = file.listFiles();
// 如果数组为空,不进行任何操作
if (null == fil) {
}
// 否则进行循环
else {
for (int i = 0; i < fil.length; i++) {
// 创建一个DefaultMutableTreeNode对象,并添加至root
DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode(
fil[i].getName());
root.add(dmtn);
// 如果是目录,迭代
if (fil[i].isDirectory()) {
dmtn = createFile(dmtn, fil[i]);
}
// 否则,不进行任何操作
else if (fil[i].isFile()) {
}
}
}
return root;
}
}
以上是自己写的JTree搜索计算机上所有的文件并生成树,然后给JTree添加打开文件的监听方法,由于是一个一个文件的搜索,略感小慢,所以在接下来的代码中添加了线程(由于不大会用sleep方法,所以未添加,以至于跑起来的时候连我引以为傲的这台机子都卡了,CPU跑在95%以上),但是不知道为什么感觉速度是差不多,不知道是我没弄清楚线程的本质还是我的感觉有误~~~主要就是多加了一个MyThread类并把迭代的方法放进了线程的run()方法里。
package cn.zyf.java树1116;
import java.awt.Desktop;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class TreeTest extends JFrame {
public static void main(String args[]) {
TreeTest tt = new TreeTest();
tt.init();
}
// 初始化窗口
public void init() {
// 设置窗体大小
this.setSize(800, 600);
// 设置窗体居中
this.setLocationRelativeTo(null);
// 初始化一个树节点对象
TreeNode tn = this.createTree();
// 添加至JTree
final JTree jt = new JTree(tn);
// 添加监听器
jt.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
// 如果右键点击,则打开文件
if(e.getButton()==e.BUTTON3){
if (e.getClickCount() == 1) {
TreePath tp = jt.getClosestPathForLocation(e.getX(),
e.getY());
String s = "";
// 从1开始循环,忽略"计算机"
for (int i = 1; i < tp.getPath().length; i++) {
s += "/"+tp.getPath()[i];
}
try {
Desktop.getDesktop().open(new File(s));
} catch (Exception ef) {
javax.swing.JOptionPane.showMessageDialog(null,
"无法打开指定的文件");
}
}
}
}
});
// 创建一个滚动条对象
JScrollPane jsp = new JScrollPane(jt);
this.add(jsp);
// 设置窗体关闭
this.setDefaultCloseOperation(3);
// 设置窗体可见
this.setVisible(true);
}
// 得到节点
public DefaultMutableTreeNode createTree() {
File file[] = File.listRoots();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("计算机");
for (int i = 0; i < file.length; i++) {
DefaultMutableTreeNode dtmn = new DefaultMutableTreeNode(file[i].getPath());
dtmn = createFile(dtmn, file[i]);
root.add(dtmn);
}
return root;
}
// 循环得到所有的文件
public static DefaultMutableTreeNode createFile(
DefaultMutableTreeNode root, File file) {
File fil[] = file.listFiles();
// 如果数组为空,不进行任何操作
if (null == fil) {
}
// 否则进行循环
else {
for (int i = 0; i < fil.length; i++) {
// 创建一个DefaultMutableTreeNode对象,并添加至root
DefaultMutableTreeNode dmtn = new DefaultMutableTreeNode(
fil[i].getName());
root.add(dmtn);
// 如果是目录,迭代
if (fil[i].isDirectory()) {
MyThread mt = new MyThread(dmtn,fil[i]);
mt.start();
}
// 否则,不进行任何操作
else if (fil[i].isFile()) {
}
}
}
return root;
}
/**
* 重写Thread线程
* @author z
* 每遇到一个目录创建一个线程,对其子文件进行搜索
*/
public static class MyThread extends Thread{
// 传入参数
public MyThread(DefaultMutableTreeNode dmtn,File file){
this.dmtn = dmtn;
this.file = file;
}
// 迭代的方法
public void run(){
dmtn = createFile(dmtn, file);
}
private DefaultMutableTreeNode dmtn;
private File file;
}
}
分享到:
相关推荐
这个项目"文件管理器(Jtree实现)"显然旨在创建一个类似Windows操作系统的文件资源管理器,让用户能够浏览、操作文件和目录。在这个实现中,`JTree`将被用来展示文件系统中的目录结构,而不仅仅是简单的数据结构。 ...
在本文中,我们将深入探讨如何使用Java编程语言来模拟实现一个类似于Windows文件资源管理器的程序。这个项目的核心目标是创建一个用户界面,允许用户浏览、操作和管理计算机上的文件和目录。Java作为一种广泛使用的...
在这个"仿windows资源管理器"项目中,开发者可能使用了JTree和JList组件来模拟文件系统的树状结构和文件列表,JFrame作为主窗口,JMenuBar用于创建菜单栏,以及JButton、JFileChooser等组件来实现打开、保存、复制、...
【标题】"Java实现Windows资源管理器(JExplorer)"是一个基于Java编程语言的项目,旨在创建一个类似Windows操作系统资源管理器的界面和功能。这个项目的主要目的是提供一个自定义的文件浏览器,用户可以通过它来浏览...
这个项目旨在实现Windows资源管理器的一些基本功能,如读取、新建、删除、打开和重命名文件或目录。由于这是一个学习项目,部分功能可能未完全实现,但足以提供对文件系统操作的基本理解和实践。 首先,让我们从...
在这个Windows资源管理器应用中,JTree可能被用来展示文件系统的目录结构,而JTable则用于显示指定目录中的文件和文件夹列表。 项目的实现可能涉及到以下关键知识点: 1. **文件I/O操作**:应用需要读取和操作文件...
Java中的`FileTreePanel`是一种实现文件系统树形视图的组件,类似于Windows或Mac操作系统中的资源管理器。这个组件通常用于图形用户界面(GUI)应用程序,让用户能够以直观的方式浏览和操作文件和目录结构。在Java中...
总的来说,“WindowsFileManagerRemake”项目是对原版Windows文件管理器的一次全面重构,它展示了如何使用Java语言和相关库实现文件系统的管理和操作。这个项目不仅锻炼了开发者对文件系统、GUI设计、事件处理等技术...
Java中的`ActionListener`和`TreeSelectionListener`接口用于监听这些事件,实现用户交互逻辑,例如打开、复制、粘贴、删除文件或目录。 5. **多线程**:如果项目包含异步操作,如加载大文件或长时间操作,多线程将...
JTree可以展示文件和目录的层次结构,用户可以通过它来浏览并选择要打开的文件。 总的来说,"j2se实现的Notepad"项目展示了如何使用Java的Swing库构建一个简单的文本编辑器,涵盖了GUI设计、文件操作、事件处理等多...
【JAVA 仿windows资源管理器的文件树】是一个基于JAVA编程语言实现的项目,它旨在模仿Windows操作系统中的资源管理器,提供用户友好的文件浏览体验。这个程序在JFrame窗口中展示了一个文件树结构,使得用户能够直观...
总结来说,实现Java目录树控件涉及对Java Swing组件的理解,特别是JTree和DefaultTreeModel的使用,以及如何通过File类来遍历和操作文件系统。通过这样的控件,用户可以方便地在GUI中导航和管理文件,极大地提升了...
标题中的"filelist.rar"可能是一个包含源代码的压缩文件,用于实现一个类似于Windows资源管理器的文件浏览功能。在IT行业中,这样的程序通常用于帮助用户直观地查看、管理和操作计算机上的文件和目录。 描述中提到...
在Java编程语言中,开发一个类似Windows XP系统中"我的电脑"的功能,是一个常见的学习项目,旨在帮助初学者更好地理解文件系统操作、图形用户界面(GUI)设计以及事件处理等核心概念。以下将详细讲解这个项目涉及的...
同时,这里还会包含事件处理代码,比如当用户点击树节点或列表项时,如何读取文件信息、打开文件、复制粘贴等操作。 为了实现资源管理器的其他功能,如文件的创建、删除、重命名,开发者可能会使用Java的文件I/O ...
2. **打开/关闭**:用户可以双击文件来打开它,如果该文件关联了默认的打开程序。对于目录,用户可以点击来展开或关闭。 3. **复制/剪切/粘贴**:提供文件和目录的复制、剪切和粘贴功能,方便用户进行文件操作。 4. ...
本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接Java虚拟机实现编译与运行。使用SUN公司的Java中的GUI作为开发技术,利用其提供的各种类与接口,首先建立系统应用原型。 本文本编辑器的...
在Java编程领域,"Java仿XP资源浏览器左边的树"是一个常见的项目,旨在实现一个类似于Windows XP操作系统中资源管理器左侧的文件系统树形结构。这个项目主要涉及到`JTree`组件的使用,它是Java Swing库中用于展示...
在Java中,实现这样的功能通常涉及到JTree类用于构建树形结构,以及FileSystemView或者java.io.File类来处理文件系统操作。此外,可能还运用了事件监听机制,以便用户可以进行诸如打开、复制、移动和删除等文件操作...