Java 实现资源管理器 JTree为什么主盘符(C D E)会出现两次, 还有显示也有点不爽 Why
我是根据 Java 2图形设计 卷II SWING 中的一个程序改的.
原程序实现了指定(E)盘下的文件遍历
而我的目的是: 遍历本地系统中的文件结构
做了一下午, 树这里还是有问题, 主盘符(C D E)会出现两次, 还有显示也有点不爽
请高人能帮我看一下,拜托了
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
public class Test extends JFrame {
private DefaultTreeModel createTreeModel() { // 创建根结点, 只执行一次
/* File root = new File("E:/");
FileNode rootNode = new FileNode(root);
rootNode.explore(); // 第一层结构显示
*/
TreeNodeData me = new TreeNodeData("My Computer");
me.addChileNodes();
return new DefaultTreeModel( me );
}
public Test() {
final JTree tree = new JTree(createTreeModel()); // 返回的是根结点 DefaultTreeModel
JScrollPane l_scrollPane = new JScrollPane(tree);
getContentPane().add(l_scrollPane, BorderLayout.WEST);
final JTextArea textArea = new JTextArea(10,10);
JScrollPane r_scrollPane = new JScrollPane(textArea);
getContentPane().add(r_scrollPane, BorderLayout.CENTER);
//getContentPane().add(GJApp.getStatusArea(), BorderLayout.SOUTH);
tree.addTreeExpansionListener(new TreeExpansionListener(){ // 重写JTree的事件监听器
public void treeCollapsed(TreeExpansionEvent e) {
}
public void treeExpanded(TreeExpansionEvent e) {
TreePath path = e.getPath(); // 表示到某节点的一条路径 返回已被扩张 / 折叠的值的路径
FileNode node = (FileNode)path.getLastPathComponent(); // 文件路径 <- (树)路径的最后一个组件
if( ! node.isExplored()) { // public boolean isExplored() { return explored; } 该节点从未打开时为false
DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); // 返回提供数据的 TreeModel
GJApp.updateStatus("exploring ...");
UpdateStatus updateThread;
UpdateStatus us = new UpdateStatus();
us.start();
node.explore();
model.nodeStructureChanged(node); // 当彻底改变节点的子节点和子节点的子节点... 时调用该方法,这将导致记入一个 treeStructureChanged 事件
}
}
class UpdateStatus extends Thread {
public void run() {
try { Thread.currentThread().sleep(450); }
catch(InterruptedException e) { }
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GJApp.updateStatus(" ");
}
});
}
}
});
}
public static void main(String args[]) {
GJApp.launch(new Test(),"JTree File Explorer", 300,300,450,400);
}
}
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false;
public FileNode(File file) {
setUserObject(file);
}
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 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(); // 测试当前 File 对象表示的文件是否是一个路径, 还能展开
}
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;
System.out.println("文件夹被第一次打开, 添加新节点时执行");
}
}
}
class GJApp extends WindowAdapter {
static private JPanel statusArea = new JPanel();
static private JLabel status = new JLabel(" ");
public static void launch(final JFrame f, String title,
final int x, final int y,
final int w, int h) {
f.setTitle(title);
f.setBounds(x,y,w,h);
f.setVisible(true);
statusArea.setBorder(BorderFactory.createEtchedBorder());
statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
statusArea.add(status);
status.setHorizontalAlignment(JLabel.LEFT);
f.setDefaultCloseOperation(
WindowConstants.DISPOSE_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
}
static public JPanel getStatusArea() {
return statusArea;
}
static public void updateStatus(String s) {
status.setText(s);
}
}
class TreeNodeData extends DefaultMutableTreeNode //
{
private File data;
private String title;
public TreeNodeData(String title)
{
super(title);
data = new File(title);
this.title = title;
}
public void addChileNodes()
{
File drivers[] = File.listRoots();
for(int i = 0;i < drivers.length;i++)
{
this.add(new TreeNodeData(drivers[i],drivers[i].getPath()));
}
}
public TreeNodeData(File file,String title)
{
super(file.getPath());
data = file;
this.title = title;
File a = new File(title);
FileNode b = new FileNode(a);
add( b );
}
}
相关推荐
Java综合性实验报告 (3).docx
。。。
树状视图演示程序ExTree
树状视图演示程序 树状视图演示程序 树状视图演示程序
无人机固定翼无人机简化燃油燃烧仿真的模拟模型(Matlab代码实现)
内容概要:本文提出了一种面向固定翼无人机的简化燃油燃烧仿真模拟模型,该模型基于Matlab平台实现,旨在对无人机在飞行过程中的燃油消耗行为进行高效、准确的模拟与分析。模型在保证工程实用性的前提下,对复杂的燃烧化学反应和热力学过程进行了合理简化,重点保留了燃料消耗速率、发动机效率与飞行状态(如高度、速度、迎角等)之间的动态耦合关系,构建了一个轻量化且具备良好泛化能力的燃油经济性评估工具。该模型可用于不同飞行剖面下的续航能力预测、任务航程规划以及能源管理策略的初步设计与验证,为无人机系统级仿真与优化提供关键支撑。; 适合人群:具备Matlab编程与仿真实践能力,从事固定翼无人机总体设计、飞行任务规划、航空动力系统或绿色航空技术研究的科研人员与工程师。; 使用场景及目标:①支撑固定翼无人机在多种工况(巡航、爬升、机动等)下的燃油消耗预测与航程评估;②服务于无人机能源管理系统的概念设计与性能优化,提升任务可靠性和飞行经济性; 阅读建议:建议读者结合Matlab代码深入理解模型结构,通过调整飞行参数(空速、海拔、推力设定等)开展仿真实验,观察燃油流量与累积消耗的变化趋势,进而掌握模型的响应特性与适用边界。
风光储协同并网发电系统仿真(Simulink仿真实现)
内容概要:本文系统介绍了基于Simulink的风光储协同并网发电系统的仿真研究,聚焦风能、光伏与储能系统的多能互补协调控制策略,涵盖并网逆变器控制、虚拟同步发电机(VSG)、下垂控制、模型预测控制(MPC)、中点电位平衡、孤岛检测、低电压穿越(LVRT)等多项核心技术的建模与仿真实现。文档列举了多个典型应用场景,如风光储交直流微电网一体化控制、PEM电解槽制氢耦合系统、VSG预同步切换控制等,并强调结合参考文献与仿真模型进行SCI级别论文的复现,突出其科研指导性与工程实用性。资源包还提供详尽的设计文档、建模报告、Mathcad计算书及配套程序,支持深入理解与二次开发; 适合人群:面向具备电力系统、新能源发电、自动控制等相关专业知识背景的研究生、科研人员及工程技术人员,尤其适用于从事MATLAB/Simulink仿真实践、需完成高水平学术论文或参与实际能源系统设计的研发人员; 使用场景及目标:①用于风光储多能互补系统的并网特性分析、动态响应评估与先进控制策略验证;②支撑SCI论文复现、科研项目攻关与创新方法提出,提升科研竞争力;③服务于高校毕业设计、课程课题研究及实际工程项目中的系统优化、性能测试与方案论证; 阅读建议:建议读者结合提供的参考文献与仿真模型同步操作,优先掌握VSG、MPC、双闭环控制等核心模块的建模逻辑与参数整定方法,注重理论推导与仿真实践相结合,循序渐进地从单一单元扩展至复杂系统集成仿真,全面提升建模能力与科研素养。
基于三次谐波注入法的Z源升压逆变器仿真、更优升压能力【有参考文献】
内容概要:本文围绕基于三次谐波注入法的Z源升压逆变器展开仿真研究,重点分析该方法在提升逆变器电压增益方面的优越性。通过Simulink仿真平台构建系统模型,详细探讨三次谐波注入的作用机理,并与传统四种基本升压控制策略进行对比,验证其在相同条件下实现更高升压比的有效性。研究还结合LCL滤波器设计以优化输出电能质量,抑制高频谐波干扰,提升系统稳定性与动态响应性能。文档配套提供完整的参考资料和可复现的仿真模型,增强了研究成果的可信度与实用性,对推动新能源发电系统中高效、高可靠逆变技术的发展具有重要参考价值。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生、科研人员及从事新能源发电系统研发的工程技术人员。; 使用场景及目标:①用于教学与科研中对Z源逆变器工作原理与先进控制策略的深入理解与实验验证;②为实际工程应用中提升逆变器升压性能提供理论支持与技术方案;③支撑SCI级别论文的复现、改进与创新性课题研究。; 阅读建议:建议结合文中提供的仿真模型与参考文献进行系统学习,重点关注三次谐波注入的实现方式及其对系统稳态精度与动态响应的影响,鼓励通过调整调制度、谐波注入比例等参数开展拓展性仿真实验,以深化对Z源网络特性和控制策略优化的理解。


Java SE
