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

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

1.实现一个界面
java 复制代码
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盘文件,先把所有名字分类成目录和文件,存储进动态数组,再通过动态数组传入按钮,并给按钮接入监听器
java 复制代码
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);
    }
}
java 复制代码
package People;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class OPFileListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {

    }
}
3.实现点击进入后遇见与一开始的界面相同的界面,即目录和文件的同布局界面,因此将第一步的方法复制粘贴到监听器中
java 复制代码
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 {
    @Override
    public 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参数
java 复制代码
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 {
    @Override
    public 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类的完整路径传入按钮
java 复制代码
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.在监听器中也向目录按钮传入该文件的完整路径,点击进去后得到该文件的集体内容
java 复制代码
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 {
    @Override
    public 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.向面板当中添加按钮。.创建主函数调用方法,至此全部完成,简单的文件点击系统实现
java 复制代码
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();
    }
}
java 复制代码
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 {
    @Override
    public 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);
    }
}
相关推荐
这个昵称不容易3 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长4 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
文丑颜不良啊5 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼5 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
文丑颜不良啊7 小时前
LeetCode2161~2180题目解析
java·leetcode
文丑颜不良啊9 小时前
LeetCode2141~2160题目解析
java·leetcode
LabVIEW开发9 小时前
LabVIEW 连接板:28 个端子怎么排,优先级怎么定
java·算法·labview
天天被压力10 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力10 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A10 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python