当前位置: 首页 > news >正文

项目历程—可视化文件系统

目标:实现C盘打开后,可以点开文件或者目录,并且新的界面依旧可以打开文件或目录,可以重复使用

1.实现一个界面
package People;import javax.swing.*;
import java.awt.*;
import java.io.File;public class FileSystem {static String rootPath="C:\\";public  void showUI(){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File file=new File(rootPath);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);jf.setVisible(true);}
}
2.向该界面传入C盘文件,先把所有名字分类成目录和文件,存储进动态数组,再通过动态数组传入按钮,并给按钮接入监听器
package People;import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;public class FileSystem {static String rootPath="C:\\";OPFileListener fol=new OPFileListener();public  void showUI(){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File file=new File(rootPath);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.addActionListener(fol);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(fol);}jf.setVisible(true);}
}
package People;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class OPFileListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}
}
3.实现点击进入后遇见与一开始的界面相同的界面,即目录和文件的同布局界面,因此将第一步的方法复制粘贴到监听器中
package People;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;public class OPFileListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {}public  void showNewUI(){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File file=new File(rootPath);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.addActionListener(fol);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(fol);}jf.setVisible(true);}
}
4.修改报错点,将fol改为this,去除File file=new file(rootPath),在方法中传入file参数
package People;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;public class OPFileListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String dirName=e.getActionCommand();File file=new File(dirName);showNewUI(file);}public  void showNewUI(File file){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.addActionListener(this);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(this);}jf.setVisible(true);}
}
5.结合在FileSystem中File file=new File(rootPath)可得到C盘文件可知,需要在一个()中传入该文件目录的路径,才能进入该目录。因此返回到FIleSystem类的向目录传入名字的过程中去,将一个ActionCommand类的完整路径传入按钮
package People;import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;public class FileSystem {static String rootPath="C:\\";OPFileListener fol=new OPFileListener();public  void showUI(){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File file=new File(rootPath);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.setActionCommand(rootPath+"\\"+dirName.get(i));btn.addActionListener(fol);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(fol);}jf.setVisible(true);}
}
6.在监听器中也向目录按钮传入该文件的完整路径,点击进去后得到该文件的集体内容
package People;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;public class OPFileListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String dirName=e.getActionCommand();File file=new File(dirName);showNewUI(file);}public  void showNewUI(File file){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,600);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.setActionCommand(file.getAbsolutePath()+"\\"+dirName.get(i));btn.addActionListener(this);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(this);}jf.setVisible(true);}
}
7.向面板当中添加按钮。.创建主函数调用方法,至此全部完成,简单的文件点击系统实现
package People;import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.ArrayList;public class FileSystem {static String rootPath="C:\\";OPFileListener fol=new OPFileListener();public  void showUI(){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,200);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File file=new File(rootPath);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.setActionCommand(rootPath+"\\"+dirName.get(i));btn.addActionListener(fol);jf.add(btn);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(fol);jf.add(btn);}jf.setVisible(true);}public static void main(String[] args) {FileSystem fileSystem=new FileSystem();fileSystem.showUI();}
}
package People;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;public class OPFileListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {String dirName=e.getActionCommand();File file=new File(dirName);showNewUI(file);}public  void showNewUI(File file){JFrame jf=new JFrame();jf.setTitle("文件系统");jf.setSize(800,600);jf.setLocation(200,200);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);File[] files=file.listFiles();int column=4;int row=(files.length/column)+1;GridLayout gl=new GridLayout(row,column,10,10);jf.setLayout(gl);ArrayList<String> dirName=new ArrayList<>();ArrayList<String> fileName=new ArrayList<>();for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isDirectory()){dirName.add(files[i].getName());}}}for(int i=0;i< files.length;i++){if(!files[i].isHidden()){if(files[i].isFile()){fileName.add(files[i].getName());}}}
//名字已经传入,接下来传入按钮for(int i=0;i<dirName.size();i++){JButton btn=new JButton(dirName.get(i));btn.setActionCommand(file.getAbsolutePath()+"\\"+dirName.get(i));btn.addActionListener(this);jf.add(btn);}for(int i=0;i<fileName.size();i++){JButton btn=new JButton(fileName.get(i));btn.addActionListener(this);jf.add(btn);}jf.setVisible(true);}
}
http://www.dtcms.com/a/321084.html

相关文章:

  • ESP32-menuconfig(2) -- Application manager
  • MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层 MyBatis SQL映射与动态SQL:构建灵活高效的数据访问层
  • wodpress结构化数据对SEO的作用
  • 【重磅发布】flutter_chen_keyboard -专注于键盘相关功能
  • Flutter多引擎架构下原生通信的模块化封装与性能优化
  • Spring AI将存量接口转化为MCP服务(附源码)
  • MES系统是什么?从核心功能到行业应用,打造智能制造新引擎
  • nlp-语义分析
  • 全面了解svm
  • 从零开始将项目镜像部署到离线Windows服务器的完整流程
  • ADB打印设备日志相关
  • GPT-5 全面解析与 DeepSeek 实战对比:推理、工具调用、上下文与成本
  • 十三、抽象队列同步器AQS
  • luckfox开发板的usb口作为串口使用
  • 【matlab】采样信号的低通滤波、高通滤波
  • SVN下载及安装(保姆级别)
  • 【网络运维】Linux:MariaDB 数据库介绍及管理
  • 6、图片上方添加波浪效果
  • 深入探索 PDF 数据提取:PyMuPDF 与 pdfplumber 的对比与实战
  • Dubbo应用开发之基于xml的第一个Dubbo程序
  • 第五十五章:AI模型的“专属定制”:LoRA微调原理与高效合并技巧
  • Vue 3 表单数据缓存架构设计:从问题到解决方案
  • 站在Vue的角度,对比鸿蒙开发中的数据渲染二
  • Introducing Visual Perception Token into Multimodal Large Language Model论文解读
  • GitHub 趋势日报 (2025年08月07日)
  • 厂区周界人员闯入识别误报率↓76%:陌讯动态监测算法实战解析
  • 全面解析软件工程形式化说明技术
  • 密码学中间人攻击(Man-in-the-Middle):隐藏在通信链中的“窃听者“
  • Block Styler——浏览文件控件
  • zoho crm 的用户为什么在 api 名称页面不能点进模块查看字段的 api 名称