📄 search.java
字号:
package yechen;
import java.io.File;
import java.util.Vector;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class Search extends JFrame implements ActionListener, Runnable {
//定义各JLABEL组件
JLabel labelText;
JLabel labelLook;
JLabel labelSearch;
JLabel labelResult;
//定义各JTextField 组件.
JTextField textText;
JTextField textLook;
//定义各 JButton 组件
JButton search;
JButton search2;
JButton cancel;
JButton browse;
//定义各 JPanel 组件
JPanel panel;
JPanel paneLeft;
JPanel paneRight;
JPanel pane1;
JPanel pane2;
JPanel pane3;
JPanel pane4;
//JPanel pane5;
JPanel p1;
JPanel p2;
JPanel p3;
// 定义 JScrollPane 组件
JScrollPane scrollpane;
//定义 String 对象.
static String strText;
static String strLook;
// 定义各 JTable 组件
JTable table;
int count = 0;
int FLAG = 0;
Vector vRow = new Vector();
Vector vCol = new Vector();
public FileList fl = new FileList(this);//定义并初始化两个列出文件的类
public FileList2 f2 = new FileList2(this);
//public Help h;
DefaultTableModel model;
Thread thread1, thread2;
int countFile;
public Search() {
try {
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
usage();//调用出现错误函数
}
setSize(800, 600);//窗口大小
setTitle("文件搜索");//定义窗口名称
panel = new JPanel();
/* 设置布局为Grid layout布局*/
panel.setLayout(new GridLayout(0, 2));
/*添加天窗口 */
getContentPane().add(panel);
/*
以下为初始化并添加各组件.
并添加了相应面板
*/
paneLeft = new JPanel();
paneRight = new JPanel();
panel.add(paneLeft);
panel.add(paneRight);
paneLeft.setLayout(new BorderLayout());
// pane5 = new JPanel();
// pane5.setLayout(new FlowLayout(FlowLayout.RIGHT));
//help = new JButton("Help");
//help.addActionListener(this);
//pane5.add(help);
//paneLeft.add(pane5, BorderLayout.SOUTH);
pane3 = new JPanel();
pane3.setLayout(new GridLayout(6, 0));
paneLeft.add(pane3, BorderLayout.NORTH);
p1 = new JPanel();
p1.setLayout(new FlowLayout(FlowLayout.LEFT));
labelLook = new JLabel("Search for file(s) in:");
p1.add(labelLook);
labelLook.setFont(new Font("Verdana", Font.BOLD, 12));
pane3.add(p1);
pane1 = new JPanel();
pane1.setLayout(new FlowLayout(FlowLayout.LEFT));
textLook = new JTextField(25);
browse = new JButton("浏览");
browse.addActionListener(this);
pane1.add(textLook);
pane1.add(browse);
textLook.setFont(new Font("Verdana", Font.PLAIN, 12));
pane3.add(pane1);
p2 = new JPanel();
p2.setLayout(new FlowLayout(FlowLayout.LEFT));
labelText = new JLabel("Containing text:");
p2.add(labelText);
labelText.setFont(new Font("Verdana", Font.BOLD, 12));
pane3.add(p2);
p3 = new JPanel();
p3.setLayout(new FlowLayout(FlowLayout.LEFT));
textText = new JTextField(33);
p3.add(textText);
textText.setFont(new Font("Verdana", Font.PLAIN, 12));
pane3.add(p3);
pane2 = new JPanel();
pane2.setLayout(new FlowLayout(FlowLayout.LEFT));
search = new JButton("以文件名搜索");
cancel = new JButton("停止搜索");
search2 = new JButton("以文件内容搜索");
pane2.add(search);
search.addActionListener(this);
pane2.add(search2);
search2.addActionListener(this);
pane2.add(cancel);
cancel.addActionListener(this);
pane3.add(pane2);
pane4 = new JPanel();
pane4.setLayout(new FlowLayout(FlowLayout.LEFT));
labelSearch = new JLabel("Search Result(s): ");
labelSearch.setFont(new Font("Verdana", Font.BOLD, 12));
labelResult = new JLabel("0 files.");
labelResult.setFont(new Font("Verdana", Font.BOLD, 12));
pane4.add(labelSearch);
pane4.add(labelResult);
pane3.add(pane4);
paneRight.setLayout(new BorderLayout());
model = new DefaultTableModel();
vCol.addElement("File Name");
//vCol.addElement("Start Position");
//vCol.addElement("Path");
vCol.addElement("Path");
model = new DefaultTableModel(vRow, vCol);
table = new JTable(model);
scrollpane = new JScrollPane(table);
paneRight.add(scrollpane, BorderLayout.CENTER);
/* Pack the components of the frame. */
doLayout();
pack();
addWindowListener(new WindowAdapter() { //窗口监听器
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
}
//实现监听的方法
public void actionPerformed(ActionEvent ae) {
//当按下以文件名搜索时执行
if (ae.getSource() == search) {
countFile = 0;
count = 0;
FLAG = 0;
model.setNumRows(0);
search.setEnabled(false);
strText = textText.getText();
strLook = textLook.getText();
//判断是否输入为空
if (strText.equals("") == false && strLook.equals("") == false) {
try {
thread1 = new Thread(this);
thread1.start();
} catch (Exception e) {
System.out.println("Error!" + e);
}
}
//弹出提示窗口
else {
JOptionPane.showMessageDialog(this,
"You must enter the searching text.", "Alert Message",
JOptionPane.WARNING_MESSAGE);
}
}
// 当按下以文件内容搜索时执行
else if (ae.getSource() == search2) {
countFile = 0;
count = 0;
FLAG = 0;
model.setNumRows(0);
search2.setEnabled(false);
strText = textText.getText();
strLook = textLook.getText();
//判断是否输入为空
if (strText.equals("") == false && strLook.equals("") == false) {
try {
//thread2 = new Thread(this);
//thread2.start();
f2.listFiles(strLook);
} catch (Exception e) {
System.out.println("Error!" + e);
}
}
else {
JOptionPane.showMessageDialog(this,
"You must enter the searching text.", "Alert Message",
JOptionPane.WARNING_MESSAGE);
}
}
///判断当点击浏览文件时执行
else if (ae.getSource() == browse) {
try {
//初始化一个文件选择框
JFileChooser jfc = new JFileChooser();
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
jfc.showOpenDialog(this);
//用 getSelectedFile() 方法取得文件.或文件夹
File file = jfc.getSelectedFile();
//取得文件夹路径
String str = file.getAbsolutePath();
textLook.setText(str);
} catch (Exception e) {
System.out.println("Error" + e);
}
}
///当按下取消搜索键时执行
else if (ae.getSource() == cancel) {
search.setEnabled(true);
FLAG = 1;//把FLAG设值为1
}
//当按下帮助键时执行
//else if (ae.getSource() == help) {
/* It shows the help utility. */
// h = new Help();
// h.show();
//}
}
public void run() {
fl.listFiles(strLook);
}
//主函数
public static void main(String[] args) {
Search s = new Search();
s.show();
}
//处理错误的函数方法
public static void usage() {
System.err.println("Error");
System.exit(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -