• Java简易实现记事本的打开与保存


    记事本的打开与保存


    一些总结


    * Swing中有时方法不显示,需要把方setVisible(true)放到最后执行
    * AWT中的TextArea默认是中间布局  
    * fileDialog对话框Load模式需要对取消事件进行处理
    * 快捷键使用需要用到JmenuItem
    

    主方法


    package cn.work.demo.demo03;
    
    public class NotePad {
        public static void main(String[] args) {
    
            NotepadWindow MyNotePad = new NotepadWindow();
    
            //生成窗体
            MyNotePad.frameWindow();
    
        }
    }
    
    

    窗口面板


    package cn.work.demo.demo03;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.KeyEvent;
    
    public class NotepadWindow {
    
        //静态文本区域对象,由该类调用
        static TextArea textArea;
    
        //记事本窗体
        public void frameWindow() {
            //新建一个JFrame窗体,并为其实现Swing程序中的各个组件
            JFrame frame = new JFrame("记事本");
            //窗口大小
            frame.setSize(1200,680);
            //设置窗口在屏幕的位置,null居中
            frame.setLocationRelativeTo(null);
            //设置关闭响应,直接关闭
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    
            //添加记事本的文本区域
            addTextArea(frame);
            //添加窗口的菜单项
            addMenu(frame);
    
            //窗口可见
            frame.setVisible(true);
        }
    
    
        //记事本的文本区域
        private void addTextArea(JFrame frame) {
            textArea = new TextArea();
            //设置字体显示格式
            textArea.setFont(new Font("宋体",Font.PLAIN,23));
            frame.add(textArea);
    
        }
    
        //记事本的菜单
        private void addMenu(JFrame frame) {
    
            //使用Swing工具包替代AWT,方便添加快捷键
            //创建菜单栏对象
            JMenuBar menuBar = new JMenuBar();
            //创建“文件”菜单
            JMenu file = new JMenu("文 件");
    
            // 创建 打开 菜单选项
            JMenuItem open = new JMenuItem("打开文件   ");
            open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
                    java.awt.Event.CTRL_MASK));
    
            // 创建 保存 菜单选项
            JMenuItem save = new JMenuItem("保存文件   ");
            save.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S,java.awt.Event.CTRL_MASK));
    
            //把菜单栏添加到窗口上
            frame.setJMenuBar(menuBar);
    
            //把file添加到菜单栏中
            menuBar.add(file);
    
            //将选项添加进file中
            file.add(open);
            file.add(save);
    
    
            //给 打开 添加OpenActionListener监听器
            open.addActionListener(new OpenActionListener(frame));
            //给 保存 SaveActionListener监听器
            save.addActionListener(new SaveActionListener(frame));
    
    
        }
    }
    
    

    "打开"监听器


    package cn.work.demo.demo03;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    // "打开" 监听器从硬盘文件中读入内容
    public class OpenActionListener implements ActionListener {
        //定义一个窗体容器用来接受传入的窗体
        private JFrame frame;
        //构造方法接受传送进来的窗体
        OpenActionListener(JFrame frame){
            this.frame = frame;
        }
    
        //必须要重写ActionListener的抽象方法,写入事件发生后需要执行的内容
        @Override
        public void actionPerformed(ActionEvent e) {
    
            //创建一个文件对话框,默认load,传入对话框窗体frame
            FileDialog fileDialog = new FileDialog(frame);
            //显示文件选择对话框
            fileDialog.setVisible(true);
    
    
            //获取选择的目录路径
            //获取选择的文件名
            //获取文件的绝对路径
            String absPath = fileDialog.getDirectory() + fileDialog.getFile();
    
            //如果选中文件,但点击了取消,会得到null直接返回null,不影响后续操作
            if(fileDialog.getFile() == null){
                System.out.println(fileDialog.getFile());
                return;
            }
    
            BufferedReader bufre = null;
            //try catcah 处理编译异常
            try {
                //创建字符缓冲输入流对象,构造方法由字符输入流绑定输入地址
                bufre = new BufferedReader(new FileReader(absPath));
    
                //创建字节数组,存储读入的数据
                char[] chars = new char[1024];
    
                //len为读取的有效位数
                int len = 0;
                //打开前清空文本区域
                NotepadWindow.textArea.setText("");
                //使用read读取内容
                while ((len = bufre.read(chars)) != -1) {
                    //提取每次读的字符,生成字符串
                    String str = new String(chars,0,len);
                    //拼接每一次得到的字符串
                    NotepadWindow.textArea.append(str);
                }
                bufre.close();
            }catch(IOException obj){
                //获取异常信息
                obj.getMessage();
    
            }
    
    
        }
    }
    
    

    “保存”监听器


    package cn.work.demo.demo03;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    // "保存" 监听器从硬盘文件中读入内容
    public class SaveActionListener implements ActionListener{
    
            //定义一个窗体容器用来接受传入的窗体
            private JFrame frame;
    
            //构造方法接受传送进来的窗体
            SaveActionListener(JFrame frame){
                this.frame = frame;
            }
    
        @Override
        public void actionPerformed(ActionEvent e) {
    
    
            //创建一个文件对话框,传入对话框窗体frame
            FileDialog fileDialog = new FileDialog(frame);
            //设置为SAVE模式
            fileDialog.setTitle("保存");
            fileDialog.setMode(FileDialog.SAVE);
    
    
            //显示文件选择对话框
            fileDialog.setVisible(true);
    
            //获取保存的目录路径
            String absPath = fileDialog.getDirectory() +fileDialog.getFile();
    
            BufferedWriter bufw = null;
            try {
                //字符缓冲输出流,构造方法传入字符输出流绑定输出路径
                bufw = new BufferedWriter(new FileWriter(absPath));
    
                String str = NotepadWindow.textArea.getText();
                //向文件写入数据
                bufw.write(str);
                //关闭并刷新输出流
                bufw.close();
            }catch (IOException obj){
                obj.getMessage();
            }
        }
    }
    
    
    • bug:swing编程时而不显示菜单选项,改变语句顺课序解决,后查阅资料需要将可见性设置在逻辑最后。
  • 相关阅读:
    TOJ5272: 逆矩阵
    TOJ4537: n阶行列式
    gym101532 2017 JUST Programming Contest 4.0
    Float(浮动)
    块级元素与行级元素
    MyBatis-Oracle生成主键,嵌套对象中的List增加
    MyBatis嵌套对象中的List查询
    dbcp properties
    Idea菜单字体大小调整
    DOM4J
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/11686043.html
Copyright © 2020-2023  润新知