目标:实现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);
}
}