简单记事本&Java

目标:

学习java的IO流和文件的打开保存

内容:

 使用javaSwing包里面的一些东西,比如按钮、菜单来进行布局

代码:

package myNotePad;

import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.FeatureDescriptor;
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;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class MyNotePad {
    public static void main(String[] args) {
        final JFrame jFrame = new JFrame("记事本");
        
        JMenuBar jMenuBar = new JMenuBar();
        jFrame.setJMenuBar(jMenuBar); // 注意!此处把菜单栏加到框架里面不是调用add方法(卡了40分钟,屏幕不显示窗体)
        
        JMenu jMenu1 = new JMenu("文件");
        JMenu jMenu2= new JMenu("编辑");
        jMenuBar.add(jMenu1);        //add方法作用是把一个组件添加到另一个组件中。
        jMenuBar.add(jMenu2);
        
        JMenuItem jMenuItem1 = new JMenuItem("打开");
        JMenuItem jMenuItem2 = new JMenuItem("保存");
        jMenu1.add(jMenuItem1);
        jMenu1.add(jMenuItem2);
        
        final JTextArea jTextArea = new JTextArea();
        jFrame.add(jTextArea);
        //上面是框架创建完毕
        
        //下面是给"打开"操作写上事件监听器
        jMenuItem1.addActionListener(new ActionListener() {  //这样写是创建匿名时间监听器对像,也可以自己写一个事件监听器类
            @Override
            public void actionPerformed(ActionEvent e) {
                FileDialog fileDialog = new FileDialog(jFrame, "打开",FileDialog.LOAD);
                fileDialog.setVisible(true); //注意,文件对话框默认是隐藏的(卡了10分钟,不显示对话框)
                FileReader fileReader=null;
                try {
                    fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
                    //注意:获取文件是 路径名getDirectory()+文件名getFile()!!切记getFile()里不包含路径名 (卡了90分钟,下载别人源码才明白)
                } catch (FileNotFoundException e2) {
                    e2.printStackTrace();
                }
                if(fileReader!=null){
                try(
                        //7.0版本JDK支持try(){}语法,作用:()内写创建输入输出对象后,就不用在finally中写关闭资源close()方法。
                        BufferedReader bufferedReader = new BufferedReader(fileReader);
                   ) {
                    if(fileDialog.getFile()!=null){   
                    fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile());
                         String str=null;
                         while((str=bufferedReader.readLine())!=null){ //把读文件写在while里是为了第一次就能判断
                             jTextArea.append(str);
                         }
                     }
                    }
                     catch (IOException e1) {
                     }
                   }
              }
              });
        
        //下面是给"保存"操作写上事件监听器
        jMenuItem2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                FileDialog fileDialog = new FileDialog(jFrame, "保存", FileDialog.SAVE);
                fileDialog.setVisible(true);
                FileWriter fileWriter=null;
                try {
                    fileWriter = new FileWriter(fileDialog.getDirectory()+fileDialog.getFile(),true);
                    //上一句代码用到了追加功能,防止再次写入覆盖原来的内容FileWriter(String fileName, boolean append)(卡了3分钟)
                } catch (IOException e2) {
                    e2.printStackTrace();
                }
                if(fileWriter!=null){
                try (BufferedWriter bf=new BufferedWriter(fileWriter))
                
                {
                    String text = jTextArea.getText();
//                    char[] charArray = text.toCharArray();
                    bf.write(text);
                    
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
             }
            }
        });
        jFrame.setSize(400, 400);
        jFrame.setLocation(600, 300);
        jFrame.setVisible(true);
    }
   
}
View Code

 

运行:

 

思考和总结:

对事件的监听有了更深的了解

posted @ 2017-03-09 20:20  找*寻*  阅读(214)  评论(0)    收藏  举报
TOP