文件搜索2_____基于图形界面
上次做过控制台的文件搜索,感觉不过瘾,就估摸着做了一个界面化的搜索。在这里使用了JChooser控件来选择目录位置,加载一个滚动面板,用到了JList在滚动面板上加载数据。最后使用了皮肤包来美化界面。做这些东西感觉会有弱弱的成就感。
首先展示一下没有使用皮肤包的效果
上面是java系统自己的界面,下面是美化后的界面
我们可以看到美化后的界面给人的感觉很不错
我们看看这个文件搜索的主要代码,搜索文件的代码和上次写的有些稍微的不同,就是要把,搜索到的文件加入队列
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-->