界面化文件搜索器

       文件搜索2_____基于图形界面

 

 

上次做过控制台的文件搜索,感觉不过瘾,就估摸着做了一个界面化的搜索。在这里使用了JChooser控件来选择目录位置,加载一个滚动面板,用到了JList在滚动面板上加载数据。最后使用了皮肤包来美化界面。做这些东西感觉会有弱弱的成就感。

 

   首先展示一下没有使用皮肤包的效果

 


界面化文件搜索器_第1张图片
 上面是java系统自己的界面,下面是美化后的界面

 

 

 


界面化文件搜索器_第2张图片
 
界面化文件搜索器_第3张图片
 
界面化文件搜索器_第4张图片
 我们可以看到美化后的界面给人的感觉很不错

 

我们看看这个文件搜索的主要代码,搜索文件的代码和上次写的有些稍微的不同,就是要把,搜索到的文件加入队列

 

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;

import javax.swing.JTextField;


public class SearchListener implements ActionListener{

	//声明两个文本框
	private JTextField jtfFileName;
	private JTextField jtfPosition;

	ArrayList strFindFiles= new ArrayList<String>();
	private static int countFile=0;
	
	//两个字符串用来储存文件位置和名称
	String fileName;
	String filePosition;
	
	public SearchListener(JTextField jtfFileName,JTextField jtfPosition) {
		//将传递过来的文本框付给自己的
		this.jtfFileName=jtfFileName;
		this.jtfPosition=jtfPosition;
	}
	
	
	@Override
	public void actionPerformed(ActionEvent e) {
		//清空列表
		strFindFiles.clear();
		 for(int i=0;i<strFindFiles.toArray().length;i++){
			 System.out.println(strFindFiles.toArray()[i]);
		 }
		//得到文本框中的内容
		 fileName=jtfFileName.getText();
		 filePosition=jtfPosition.getText();
		 searchFile(filePosition);
		
		 //在
		 UI.FileList.setListData(strFindFiles.toArray());
		
	}


	private void searchFile(String filePosition) {
		//创建文件
		File dirFile=new File(filePosition);
		
		File[] resFile=dirFile.listFiles();
		
		if(resFile==null||resFile.length==0){
			return;
		}
		
		for(int i=0;i<resFile.length;i++){
			if(resFile[i].isDirectory()){
				//得到文件夹的名字
				String subDir=resFile[i].getAbsolutePath();
				//判断文件夹是否含有关键字
				if(subDir.contains((CharSequence) fileName)){
					//如果含有,将文件夹的路径加到队列中
					strFindFiles.add(resFile[i].getAbsolutePath());
				}		
				
				//递归到下一个文件夹
				searchFile(subDir);
			}
			//如果是文件
			if(resFile[i].isFile()){
				//得到文件名
				String name=resFile[i].getName();
				
				
				//判断是否含有关键字
				if(name.contains((CharSequence)fileName)){
					//如何含有将文件的居然对路径加到队列中
					strFindFiles.add(resFile[i].getAbsolutePath());
					

				}
				
			}
		}
		
	}
	

}

 

 下面的是UI 的一些主要代码

 

 

 

 

 

 

public void init() {
		// 用指定的图片替换界面左上角的咖啡图标
		Toolkit tk=Toolkit.getDefaultToolkit();
	    Image img=tk.getImage("F:\\ling.jpg");
	    this.setIconImage(img);
	    
	    //初始化界面的基本信息
		this.setTitle("文件查找器");
		this.setSize(700, 600);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		this.setLayout(null);
		//用皮肤包美化界面
//		try {
//			// 设置本属性将改变窗口边框样式定义
//			BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
//			org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		// 下面开始添加其他的组件

		
		// 添加一个标签
		JLabel jplPST = new JLabel("选择文件夹位置:");
		jplPST.setBounds(80, 20, 120, 30);
		this.add(jplPST);

		// 添加一个浏览按钮
		JButton jbtSkim = new JButton("浏览");
		jbtSkim.setBounds(520, 20, 70, 30);
		this.add(jbtSkim);

		// 添加一个关键字提示标签
		JLabel jlKW = new JLabel("请输入文件名称:");
		jlKW.setBounds(80, 60, 110, 30);
		this.add(jlKW);

		// 添加一个搜索按钮
		JButton jbtSearh = new JButton("搜索");
		jbtSearh.setBounds(520, 60, 70, 30);
		this.add(jbtSearh);

//		//设置面板的颜色
//		jplFiles.setBackground(Color.white);
//		//设置面板的位置
//		jplFiles.setBounds(50, 110, 600, 420);
//		this.add(jplFiles);
		//下步比较重要,为面板添加一个滚动面板
//		jplFiles.add(new JScrollPane(FileList,
//		JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
//		JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
		//设置JList的行数
		FileList.setVisibleRowCount(25);
		//设置JList的宽度
		FileList.setFixedCellWidth(550);

		//添加一个滚动面板,数据的加载设置为FileList
		JScrollPane jsp=new JScrollPane(FileList,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		//设置滚动面板的位置
		jsp.setBounds(50, 110, 600, 420);
		this.add(jsp);

		//显示界面
		this.setVisible(true);
		jbtSkim.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				//声明一个JChooser来获得一个查找文件夹的路径
				JFileChooser fch = new JFileChooser();
				//设置当前的文件选择模式,这里设置为只选择文件夹
				fch.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
				//显示文件选择窗口
				int option = fch.showDialog(UI.this, null);

				//若用户选择打开则执行
				if (option == JFileChooser.APPROVE_OPTION) {
					//获得绝对路径
					String path = fch.getSelectedFile().getAbsolutePath();
					//将绝对路径放到目录文本框中
					jtfPosition.setText(path);
				}

			}

		});

		// 为搜索按钮添加一个监听
		SearchListener sl = new SearchListener(jtfFileName, jtfPosition);

		//为按钮添加一个监听器
		jbtSearh.addActionListener(sl);
	}

 

不过程序还有一个很大的缺陷。就是在面板上加载的文件信息只能呈现在面板上,而不能像操作系统自带的文件搜索程序那样,在可以单击搜索到的文件并用特定的程序打开。对于这个缺陷会在以后的编写中慢慢的加上去。。具体的程序代码,我附在附件上了

 

<!--EndFragment--><!--EndFragment-->

 

<!--EndFragment-->

你可能感兴趣的:(文件)