Java jframe 记事本 用java实现记事本_实例化

实现打开与保存的记事本



  1 package com.tanzhou.notepad.util;
  2 
  3 import java.awt.Color;
  4 import java.awt.event.ActionEvent;
  5 import java.awt.event.ActionListener;
  6 import java.io.BufferedReader;
  7 import java.io.BufferedWriter;
  8 import java.io.FileReader;
  9 import java.io.FileWriter;
 10 import java.io.IOException;
 11 
 12 import javax.swing.JFileChooser;
 13 import javax.swing.JFrame;
 14 import javax.swing.JMenu;
 15 import javax.swing.JMenuBar;
 16 import javax.swing.JMenuItem;
 17 import javax.swing.JTextArea;
 18 
 19 /**
 20  * @className NotepadTest.java
 21  * 
 22  * @Description:TODO(生成一个记事本)
 23  * 
 24  * @date 2018.7.23
 25  * 
 26  * @author 银桑的洞爷湖
 27  *
 28  */
 29 public class NotepadTest extends JFrame implements ActionListener{// 监听事件
 30 // 1.定义一个文本框 全局变量,在哪都可以使用 new的话一开始就会占用空间;null的话,创造了但不会占用空间
 31 JTextArea jTextArea=null;
 32 // 2.定义一个菜单栏
 33 JMenuBar jMenuBar = null;
 34 // 3.定义一个菜单"文件"
 35 JMenu jMenu1 = null;
 36 // 4.定义 打开和
 37 JMenuItem jMenuItem1 = null;
 38 // 5.保存
 39 JMenuItem jMenuItem2 = null;
 40 // 6.定义一个文件选择
 41 JFileChooser jFileChooser = null;
 42 // 7.定义一个filereader 文件输入流:从中读取数据,打开时要用输入流读取
 43 FileReader fileReader = null;
 44 // 8.定义一个filewrite 文件输出流:保存 保存到某个文件中
 45 FileWriter fileWriter = null;
 46 // 9.定义一个缓冲字符输入流 缓冲区 可当成一个水池,每次给里面放一瓢水,等这个水池蓄满以后一次性取出来
 47 BufferedReader bufferedReader = null;
 48 // 10.定义一个缓冲字符输出流 
 49 BufferedWriter bufferedWrider = null;
 50 
 51 /**
 52      * @Description:TODO(构造函数) 方法名必须和类名相同
 53      * @param
 54      * @return 思路:
 55                           生成一个记事本 
 56                           1.定义记事本的样式
 57                           2.生成一个记事本
 58                           3.实现记事本的功能 打开和保存
 59 */
 60 
 61     public NotepadTest(){
 62       // 1.实例化文本框 new
 63       jTextArea=new JTextArea();
 64       // 2.实例化菜单栏
 65       jMenuBar=new JMenuBar();
 66       // 3.实例化一个菜单"文件"
 67       jMenu1=new JMenu("文件");
 68       // 4.实例化 打开 按钮
 69       jMenuItem1=new JMenuItem("打开");
 70       // 绑定监听事件 监视者的意思
 71       jMenuItem1.addActionListener(this);// this表当前对象 jMenuItem1
 72       jMenuItem1.setActionCommand("打开");// setActionCommand:给哪个设置监听事件
 73       // 5.实例化 保存 按钮
 74       jMenuItem2 = new JMenuItem("保存");
 75       // 绑定监听事件 监视者的意思
 76       jMenuItem2.addActionListener(this);// this表当前对象
 77       jMenuItem2.setActionCommand("保存");// setActionCommand:给哪个设置监听事件
 78       // 6.设置文本框的背景颜色
 79       jTextArea.setBackground(Color.WHITE);
 80          // 7.归为 定位
 81       // 将菜单栏添加到窗体中
 82       this.setJMenuBar( jMenuBar );
 83       // 将菜单添加到菜单栏中
 84       jMenuBar.add(jMenu1);
 85       // 将“打开”和“保存”添加到“文件”菜单中
 86       jMenu1.add(jMenuItem1);
 87       jMenu1.add(jMenuItem2);
 88       // 将文本框添加到窗体中
 89       this.add(jTextArea);
 90       // 8.设置记事本标题
 91       this.setTitle("啊灵呀记事本");
 92       // 9.设置记事本大小
 93       this.setSize(800,600);
 94       // 10.当我们关闭窗口时 关闭进程
 95       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 96       // 11.显示窗口
 97       this.setVisible(true);
 98      }
 99 
100     // 用流一般要抛异常
101 
102     /**
103      * @Description:TODO(main函数 门)
104      * @param args
105      * @return void
106      */
107 
108     public static void main(String[] args){
109       NotepadTest notepadTest=new NotepadTest();
110     }
111 
112     @Override
113     public void actionPerformed(ActionEvent e){
114     // 实现 打开 和 保存 功能
      //点  打开  按钮  
115     if(e.getActionCommand().equals("打开")){
116       // 1.实例化jFileChooser 文件选择
117       jFileChooser=new JFileChooser();
118       // 2.定义一个标题
119       jFileChooser.setDialogTitle("选择要打开的文件");
120       // 3.设置一个默认的路径
121       jFileChooser.showOpenDialog(null);
122       // 4.当点击打开时,让文件选择框自动弹出
123       jFileChooser.setVisible(true);
124       //5.用address 保存用户编辑文件的绝对路径
125       String address=jFileChooser.getSelectedFile().getAbsolutePath();
126     
127       try{
128         // 6.实例化文件输入流
129         fileReader=new FileReader(address);
130         //7.实例化缓冲字符输入流 缓冲区 暂时存放进去
131         bufferedReader =new BufferedReader(fileReader);
132         //8.定义一个str判断输入的字符是否已经为空
133         String str="";
134         //9.定义一个strAll接收文件的全部信息
135         String strAll="";
136         //去缓冲区取数据并保存到strAll中 read()返回-1,读取完    readLine():一行行读
137         while((str=bufferedReader.readLine())!=null){
138           strAll=str+"\r\n";
139         }
140         jTextArea.setText(strAll);
141       }catch(IOException e1){
142         e1.printStackTrace();
143       }finally{// 可保证里面的代码一定会执行
144         try{
145           bufferedReader.close();
146           fileReader.close();
147         }catch(IOException e1){
148           e1.printStackTrace();
149         }
150       }
151     }

      //点  保存  按钮
      if(e.getActionCommand().equals("保存")){
        JFileChooser jFileChooser1=new JFileChooser();
        jFileChooser1.setDialogTitle("保存");
        jFileChooser1.showSaveDialog(null);
        jFileChooser1.setVisiable(true);
           try{
             //为fileWrite分配空间   输出流
             fileWriter =new FileWriter(jFileChooser1.getSelectedFile().getAbsolutePath());
             //为bufferedWrite分配空间  缓冲输出流
             bufferedWriter = new BufferedWriter(fileWriter);
             //保存进去
             bufferedWriter.write(this.jTextArea.getText());
           }catch (IOException e2) {
              e2.printStackTrace();
           }finally {

              //关闭文件
              try {
                fileWriter.close();
                bufferedWriter.close();
              } catch (IOException e3) {
                e3.printStackTrace();
                }}
152      }
     }
153 }