1. 程式人生 > >IO程式設計——記事本開發

IO程式設計——記事本開發

package com.note;

import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class NotePad extends JFrame implements ActionListener{
	
	//定義相關元件
	JTextArea jta = null;
	JScrollPane  jsp = null;
	JMenuBar jmb = null;
	JMenu jm1 = null;
	JMenu jm2 = null;
	JMenu jm3 = null;
	JMenu jm4 = null;
	JMenu jm5 = null;
	JMenuItem jmi1 = null;
	JMenuItem jmi2 = null;
	JMenuItem jmi3 = null;
	JMenuItem jmi4 = null;
	JMenuItem jmi5 = null;
	
	
	public static void main(String[] args) {
		NotePad np = new NotePad();

	}
	
	//建構函式
	public NotePad(){
		jta = new JTextArea();
		jsp = new JScrollPane(jta);//文字域加入滾動條
		jmb = new JMenuBar();
		jm1 = new JMenu("檔案(F)");
		jm1.setMnemonic('F');
		jm2 = new JMenu("檔案(E)");
		jm2.setMnemonic('E');
		jm3 = new JMenu("格式(O)");
		jm3.setMnemonic('O');
		jm4 = new JMenu("檢視(V)");
		jm4.setMnemonic('V');
		jm5 = new JMenu("幫助(H)");
		jm5.setMnemonic('H');
		jmi1 = new JMenuItem("新建(N)");
		
		jmi2 = new JMenuItem("開啟(O)");
		jmi2.addActionListener(this);
		jmi2.setActionCommand("open");
		
		jmi3 = new JMenuItem("儲存(S)");
		jmi3.addActionListener(this);
		jmi3.setActionCommand("save");
		
		
		this.setJMenuBar(jmb);
		//加入選單工具條
		jmb.add(jm1);
		jmb.add(jm2);
		jmb.add(jm3);
		jmb.add(jm4);
		jmb.add(jm5);
			//加入檔案選單項
		jm1.add(jmi1);
		jm1.add(jmi2);
		jm1.add(jmi3);
		
		
		this.add(jsp);	//帶滾動的文字域
		
		this.setTitle("NotePad-Java Version");
		this.setSize(800, 500);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
			//選擇開啟檔案
		if (e.getActionCommand().equals("open")){
			JFileChooser jfc = new JFileChooser();
			jfc.setDialogTitle("請選擇檔案...");
			jfc.showOpenDialog(null);
			jfc.setVisible(true);
			//得到開啟檔案的絕對路徑
			String filePath = jfc.getSelectedFile().getAbsolutePath();

			FileReader fr = null;
			BufferedReader br = null;
			
			try {
				fr = new FileReader(filePath);
				br = new BufferedReader(fr);
				//從檔案中讀取文字並顯示到jta
				String str = "";
				String allStr = "";
				while ((str = br.readLine()) != null){
					allStr += str+"\r\n";
				}
				//顯示文字
				jta.setText(allStr);
				
			} catch (Exception e1) {
				// TODO 自動生成的 catch 塊
				e1.printStackTrace();
			}finally{
				try {
					br.close();
					fr.close();
				} catch (Exception e1) {
					// TODO 自動生成的 catch 塊
					e1.printStackTrace();
				}
				
			}
		
		}
		else if (e.getActionCommand().equals("save")){
			JFileChooser jfc = new JFileChooser();
			jfc.setDialogTitle("另存為...");
			jfc.showSaveDialog(null);
			jfc.setVisible(true);
			
			//得到檔案儲存的路徑
			String filePath = jfc.getSelectedFile().getAbsolutePath();
			//寫入檔案
			FileWriter fw = null;
			BufferedWriter bw = null;
			try {
				fw = new FileWriter(filePath);
				bw = new BufferedWriter(fw);
				
				//寫入文字
				bw.write(this.jta.getText());
				
				
			} catch (Exception e1) {
				// TODO 自動生成的 catch 塊
				e1.printStackTrace();
			}finally{
				try {
					bw.close();
					fw.close(); //FileWriter必須後關閉,否則檔案不會正常儲存
				} catch (Exception e1) {
					// TODO 自動生成的 catch 塊
					e1.printStackTrace();
				}
			
			}
			
		}
		
	}
	
	

}