📄 filetree.java
字号:
package SpellCheck;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
@SuppressWarnings("serial")
public class FileTree extends JFrame{
JDesktopPane jDesktopPane1 = new javax.swing.JDesktopPane(); //主容器
JLabel jLabel1 = new javax.swing.JLabel(); //界面左上角显示目录路径
JLabel jLabel2 = new javax.swing.JLabel(); //显示所设置的字典
JLabel jLabel3 = new javax.swing.JLabel(); //显示"↑待检查文本↑"
JLabel jLabel4 = new javax.swing.JLabel(); //显示"↑检查结果↑"
JScrollPane jScrollPane1 = new javax.swing.JScrollPane(); //放目录树的容器
JTree jTree1 = new javax.swing.JTree(); //目录树
JScrollPane jScrollPane2 = new javax.swing.JScrollPane(); //放文件列表的容器
JList jList1 = new javax.swing.JList(); //文件列表
JScrollPane jScrollPane3 = new javax.swing.JScrollPane(); //放jTextArea1的容器
JTextArea jTextArea1 = new javax.swing.JTextArea(); //jTextArea1
JScrollPane jScrollPane4 = new javax.swing.JScrollPane(); //放jTextArea2的容器
JTextArea jTextArea2 = new javax.swing.JTextArea(); //jTextArea2
JButton jButton1 = new javax.swing.JButton(); //"拼写检查"按键
JButton jButton2 = new javax.swing.JButton(); //"保存结果"按键
JButton jButton3 = new javax.swing.JButton(); //"设置字典"按键
boolean firstSelect=false; //判断是否第一次选择文件列表框的内容,为鼠标的双击事件做准备
boolean setDic=false; //判断是否设置了字典
long clickTime; //记录第一次选择列表框内容的时间
File afile =new File(""); //对话框的默认路径
private MyDictionary adic =new MyDictionary();
private Checker acheck =new Checker();
private Output aout=new Output();
//private File f1=new File("");
//private File f2=new File("");
protected DefaultTreeModel m_model;
public static final ImageIcon ICON_COMPUTER = new ImageIcon("computer.gif"); //我的电脑的图标
public static final ImageIcon ICON_DISK = new ImageIcon("disk.gif"); //磁盘的图标
public static final ImageIcon ICON_FOLDER = new ImageIcon("folder.gif"); //文件夹的图标
public static final ImageIcon ICON_EXPANDEDFOLDER = new ImageIcon("expandedfolder.gif");//展开的文件夹的图标
//------------------------------------目录树------------------------------------
public FileTree(){
super("软件工程9班 第六小组 拼写检查");
setSize(800,600);
DefaultMutableTreeNode top = new DefaultMutableTreeNode(
new IconData(ICON_COMPUTER, null, "我的电脑"));
DefaultMutableTreeNode node;
File[] roots = File.listRoots();
for (int k=0; k<roots.length; k++){
node = new DefaultMutableTreeNode(new IconData(ICON_DISK,null, new FileNode(roots[k])));
top.add(node);
node.add( new DefaultMutableTreeNode(new Boolean(true)));
}
m_model = new DefaultTreeModel(top);
jTree1 = new JTree(m_model);
jTree1.putClientProperty("JTree.lineStyle", "Angled");
TreeCellRenderer renderer = new IconCellRenderer();
jTree1.setCellRenderer(renderer);
jTree1.addTreeExpansionListener(new DirExpansionListener());
jTree1.addTreeSelectionListener(new DirSelectionListener());
jTree1.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jTree1.setShowsRootHandles(true);
jTree1.setEditable(false);
jButton1.setEnabled(false);
jButton2.setEnabled(false);
//事件:列表选择
jList1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
try {
change(evt);
} catch (Exception e) {
e.printStackTrace();
}
}
});
//事件:设置字典
jButton3.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
try {
getdic();
} catch (IOException e) {
e.printStackTrace();
}
}
});
//事件:拼写检查
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
if(jButton1.isEnabled()){
try {
String s=jTextArea1.getText();
acheck.check(adic,s);
jTextArea2.setText(acheck.checkInfo());
jButton2.setEnabled(true);
acheck.checkResult();
//JOptionPane.showMessageDialog(this,"检查完成!","成功",1);
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
//事件:保存结果
jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
if(jButton2.isEnabled()){
try {
saveerr();
} catch (IOException e) {
e.printStackTrace();
}
}
}
});
jLabel1.setText("");
jLabel1.setBounds(5, 5, 545, 20);
jDesktopPane1.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);
jLabel2.setText("");
jLabel2.setBounds(565, 5, 225, 20);
jDesktopPane1.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER);
jLabel3.setText("↑待检查文本↑");
jLabel3.setBounds(340, 450, 100, 20);
jDesktopPane1.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER);
jLabel4.setText("↑检查结果↑");
jLabel4.setBounds(630, 450, 100, 20);
jDesktopPane1.add(jLabel4, javax.swing.JLayeredPane.DEFAULT_LAYER);
jScrollPane1.setViewportView(jTree1);
jScrollPane1.setBounds(5, 30, 200, 250);
jDesktopPane1.add(jScrollPane1, javax.swing.JLayeredPane.DEFAULT_LAYER);
jScrollPane2.setViewportView(jList1);
jScrollPane2.setBounds(5, 285, 200, 250);
jDesktopPane1.add(jScrollPane2, javax.swing.JLayeredPane.DEFAULT_LAYER);
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane3.setViewportView(jTextArea1);
jScrollPane3.setBounds(210, 30, 340, 405);
jDesktopPane1.add(jScrollPane3, javax.swing.JLayeredPane.DEFAULT_LAYER);
jTextArea2.setColumns(20);
jTextArea2.setRows(5);
jScrollPane4.setViewportView(jTextArea2);
jScrollPane4.setBounds(560, 30, 225, 405);
jDesktopPane1.add(jScrollPane4, javax.swing.JLayeredPane.DEFAULT_LAYER);
jButton1.setText("拼写检查");
jButton1.setBounds(380, 505, 90, 30);
jDesktopPane1.add(jButton1, javax.swing.JLayeredPane.DEFAULT_LAYER);
jButton2.setText("保存结果");
jButton2.setBounds(630, 505, 90, 30);
jDesktopPane1.add(jButton2, javax.swing.JLayeredPane.DEFAULT_LAYER);
jButton3.setText("设置字典");
jButton3.setBounds(230, 505, 90, 30);
jDesktopPane1.add(jButton3, javax.swing.JLayeredPane.DEFAULT_LAYER);
add(jDesktopPane1, java.awt.BorderLayout.CENTER);
//事件:关闭窗口
WindowListener wndCloser = new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
};
addWindowListener(wndCloser);
setVisible(true);
}
//方法:获取路径的最后一个组件
DefaultMutableTreeNode getTreeNode(TreePath path){
return (DefaultMutableTreeNode)(path.getLastPathComponent());
}
FileNode getFileNode(DefaultMutableTreeNode node){
if (node == null)
return null;
Object obj = node.getUserObject();
if (obj instanceof IconData)
obj = ((IconData)obj).getObject();
if (obj instanceof FileNode)
return (FileNode)obj;
else
return null;
}
//树的展开事件
class DirExpansionListener implements TreeExpansionListener{
public void treeExpanded(TreeExpansionEvent event){
final DefaultMutableTreeNode node = getTreeNode(event.getPath());
final FileNode fnode = getFileNode(node);
Thread runner = new Thread(){
public void run(){
if (fnode != null && fnode.expand(node)){
Runnable runnable = new Runnable(){
public void run(){
m_model.reload(node);
}
};
SwingUtilities.invokeLater(runnable);
}
}
};
runner.start();
}
public void treeCollapsed(TreeExpansionEvent event) {}
}
//文件夹的选择事件
class DirSelectionListener implements TreeSelectionListener{
public void valueChanged(TreeSelectionEvent event){
DefaultMutableTreeNode node = getTreeNode(event.getPath());
FileNode fnode = getFileNode(node);
if (fnode != null){
String a=fnode.getFile().getAbsolutePath();
if(!jList1.isSelectionEmpty()){
jLabel1.setText(jList1.getSelectedValue().toString());
}
else
jLabel1.setText(a);//界面上显示路径
try{//遍历文件
listFile(new File(a));
}
catch(Exception ee){
}
}
else
jLabel1.setText("");
}
}
//方法:打开字典
private void getdic() throws IOException{
JFileChooser fc=new JFileChooser();
fc.setCurrentDirectory(afile);
int r1=fc.showOpenDialog(this);
File f1=new File("");
if(r1==JFileChooser.APPROVE_OPTION)
{
String s1;
s1=fc.getSelectedFile().getAbsolutePath();
f1=new File(s1);
while(!f1.exists())
{
JOptionPane.showMessageDialog(this,"词典文件不存在","错误",2);
r1=fc.showOpenDialog(this);
if(r1==JFileChooser.CANCEL_OPTION) break;
s1=fc.getSelectedFile().getAbsolutePath();
f1=new File(s1);
}
adic.OpenDictionary(f1);
setDic=true;
jButton1.setEnabled(true);
jLabel2.setText("字典名:"+s1);
JOptionPane.showMessageDialog(this,"词典设置成功","成功",1);
}
if(r1==JFileChooser.CANCEL_OPTION)
JOptionPane.showMessageDialog(this,"没有选择词典文件","警告",2);
}
//方法:保存结果
private void saveerr() throws IOException
{
JFileChooser fc=new JFileChooser();
fc.setCurrentDirectory(afile);
int r2=fc.showSaveDialog(this);
File f2=new File("");
if(r2==JFileChooser.APPROVE_OPTION)
{
String s2;
s2=fc.getSelectedFile().getAbsolutePath();
f2=new File(s2);
}
aout.outprint(acheck.errInfo,f2);
}
//方法:列表选择
public void change(MouseEvent evt) throws Exception{
if(!jList1.isSelectionEmpty()){
String s=jList1.getSelectedValue().toString();
jLabel1.setText(s);
try {
if(firstSelect&&(new File(s).isDirectory())){
long nowTime=(new Date()).getTime();
if((nowTime-clickTime)<300){
listFile(new File(s));
}
firstSelect=false;
}
else{
firstSelect=true;
clickTime=(new Date()).getTime();
BufferedReader in = new BufferedReader(new FileReader(s));
String str;
jTextArea1.setText(null);
while ((str = in.readLine()) != null) {
jTextArea1.append(str + "\n");//换行
}
in.close();
}
} catch (IOException e) {
}
}
}
//方法:列出所有文件
public void listFile(File file) throws Exception{
File[] files=file.listFiles();
/*for(int i=0;i<files.length;i++){
if(files[i].isFile()){
System.out.println("文件:"+files[i].getName());
}
else{
System.out.println("目录:"+files[i].getName());
}
}*/
jList1.setListData(files);
}
//主函数
public static void main(String argv[]){
new FileTree();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -