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(); } }