• 简单记事本&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

    运行:

    思考和总结:

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

  • 相关阅读:
    页面跳转
    vue项目流程
    前端框架发展史
    webpack构建react项目和发布流程
    React工作原理
    React项目中的registerServiceWorker作用?
    学习react总结
    浏览器的渲染:过程与原理
    浮动相关
    块级元素与内嵌元素
  • 原文地址:https://www.cnblogs.com/yishengyishiduaini321/p/6527594.html
Copyright © 2020-2023  润新知