⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filetree.java

📁 面向对象设计项目
💻 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 + -