java.awt: 自定义的简单记事本


package com.guiAWT;


import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/***
 * java.awt: 自定义的简单记事本
 * @author caojsvm
 * 
 */
public class MyJavaNotepad {
	private final String frameName = "MyFrame";
	private Frame f;
	private TextArea ta;
	
	private MenuBar menuBar;
	private Menu menu;
	private MenuItem menuItemExit;
	private MenuItem menuItemOpen,menuItemSave,menuItemSaveAs;
	
	private FileDialog openDg,saveDg;
	
	private File file;
	public MyJavaNotepad() {
		//初始化
		init();
	}
	
	
	//初始化参数
	private void init() {
		this.f = new Frame(frameName);
		
		/*************对Frame进行基本设置****************/
		//设置位置坐标、窗口大小: void setBounds(int x, int y, int width, int height)
		this.f.setBounds(600, 100, 800, 900);

		//使用默认布局管理器,不做更改
		
		
		//初始化TextArea文本区域
		ta = new TextArea(50,100);
		
		//初始化菜单栏
		menuBar = new MenuBar();
		//初始化菜单
		menu = new Menu("File");
		
		//初始化二级菜单
		menuItemOpen = new MenuItem("open file...");
		menuItemExit = new MenuItem("exit");
		menuItemSave = new MenuItem("save file");
		menuItemSaveAs = new MenuItem("save as...");
		
		//建立关系
		//添加二级菜单
		menu.add(menuItemOpen);
		menu.add(menuItemSave);
		menu.add(menuItemSaveAs);
		menu.add(menuItemExit);
		
		
		//添加菜单
		menuBar.add(menu);
		
		//窗体中添加菜单栏
		this.f.setMenuBar(menuBar);
		
		//添加组件
		this.f.add(ta);
		
		
		//加载窗体及组件的事件
		frameEvent();
		
		//显示窗口
		this.f.setVisible(true);
		
	}
	
	/***
	 * 给窗体和组件添加事件
	 */
	private void frameEvent() {
		//给窗体添加事件
		//查阅Frame类的父类Window的方法找到添加监听方法
		//查阅WindowListener监听API发现,这个接口有很多方法,所以找其适配器(实现类)WindowAdapter。
		//一般接口超过3个方法,都会有对应的适配器。
		this.f.addWindowListener(
				new WindowAdapter() {
					//关闭窗口
					public void windowClosing(WindowEvent e) {
						System.out.println("关闭窗口");
						System.exit(0);
					}
				}
		);
		
		//菜单事件
		this.menuItemExit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("点击菜单---exit...关闭窗口退出程序");
				System.exit(0);
			}
		});
		
		//菜单打开文件事件
		this.menuItemOpen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("点击菜单---open...打开文件");
				//加载打开文本框
				openFileDialogInit();
				
				//显示打开文件框
				openDg.setVisible(true);
				
				//把FileDialog中选中的文件显示在TextArea文本区域中
				openFile();
			}
		});
		
		
		//菜单保存文件事件
		this.menuItemSave.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("点击菜单---save...保存文件");
				saveFileDialogInit();
				
				saveFile();
			}
		});
		
		//菜单另存文件事件
		this.menuItemSaveAs.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("点击菜单---save as...保存文件");
				saveFileDialogInit();
				
				saveAsFile();
			}
		});
	}
	
	
	/**
	 * 初始化文件对话框
	 * public FileDialog(Frame parent,String title,int mode)
	 *   参数:
	 *    parent - 对话框的所有者
	 *    title - 对话框的标题
	 *    mode - 对话框的模式,可以是 FileDialog.LOAD 或 FileDialog.SAVE 
	 */
	private void openFileDialogInit(){
		openDg = new FileDialog(this.f, "open File...");
	}
	
	/**
	 * 初始化文件对话框
	 */
	private void saveFileDialogInit(){
		saveDg = new FileDialog(this.f, "save File...",FileDialog.SAVE);
	}
	
	
	/**
	 * 把打开的文件显示在文本区域中
	 */
	private void openFile(){
		//获取文件路径
		String dir = openDg.getDirectory();
		//System.out.println(dir);
		//获取文件名
		String fileName = openDg.getFile();
		//System.out.println(fileName);
		
		//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
		//因此要在这里做判断
		if(dir == null || fileName == null){
			return ;
		}
		
		//读取文件
		file = new File(dir,fileName);
		//System.out.println(file);
		BufferedReader buffr = null;
		try {
			//先清空一下文本区域,防止每次打开文件都追加到上次文件的后面
			this.ta.setText("");
			
			buffr = new BufferedReader(new FileReader(file));
			String str = null;
			while((str = buffr.readLine()) != null){
				this.ta.append(str+"\r\n");
			}
			//回显目录
			this.f.setTitle(frameName+" : "+file.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(buffr != null){
					buffr.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}
	
	/**
	 * 把文本区域中的内容保存到所选文件中
	 */
	private void saveFile(){
		
		System.out.println("file="+file);
		
		if(file == null){
		
			saveDg.setVisible(true);
			
			//获取文件路径
			String dir = saveDg.getDirectory();
			//System.out.println(dir);
			//获取文件名
			String fileName = saveDg.getFile();
			//System.out.println(fileName);
			
			//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
			//因此要在这里做判断
			if(dir == null || fileName == null){
				return ;
			}
			
			//读取文件
			file = new File(dir,fileName);
		}
		//System.out.println(file);
		BufferedWriter buffw = null;
		try {
			String str = this.ta.getText();
			buffw = new BufferedWriter(new FileWriter(file));
			buffw.write(str);
			
			buffw.flush();
			
			System.out.println("保存文件成功");
			//回显目录
			this.f.setTitle(frameName+" : "+file.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(buffw != null){
					buffw.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
		
	}
	
	/**
	 * 把文本区域中的内容另存到所选文件中
	 */
	private void saveAsFile(){
		saveDg.setVisible(true);
		
		//获取文件路径
		String dir = saveDg.getDirectory();
		//System.out.println(dir);
		//获取文件名
		String fileName = saveDg.getFile();
		//System.out.println(fileName);
		
		//由于点取消时,目录或文件名可能为空,会导致后面创建File对象时出现异常
		//因此要在这里做判断
		if(dir == null || fileName == null){
			return ;
		}
		
		//读取文件
		file = new File(dir,fileName);
	
		//System.out.println(file);
		BufferedWriter buffw = null;
		try {
			String str = this.ta.getText();
			buffw = new BufferedWriter(new FileWriter(file));
			buffw.write(str);
			
			buffw.flush();
			
			System.out.println("保存文件成功");
			
			//回显目录
			this.f.setTitle(frameName+" : "+file.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				if(buffw != null){
					buffw.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MyJavaNotepad();
	}

}