java中如何实现记事本的打开与保存?实例展示

BSO 2020-09-27 16:42:01 java常见问答 4661

在我们的日常生活当中,java的使用可以说是无处不在的。它几乎涉及到了生活的方方面面,极其便利。今天就来为大家介绍,java中如何实现记事本的打开与保存?并且通过实际的代码为大家展示。一起来了解一下吧。

一、首先是主方法,代码如下所示:

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编程时而不显示菜单选项,改变语句顺课序解决,需要将可见性设置在逻辑最后。

总结如下:

Swing中有时方法不显示,需要把方setVisible(true)放到最后执行。

1.AWT中的TextArea默认是中间布局;

2.fileDialog对话框Load模式需要对取消事件进行处理;

3. 快捷键使用需要用到JmenuItem。

以上就是关于java中如何实现记事本的打开与保存的主要内容了。总体而言操作还是十分简洁明了易于上手的。如果你对java知识感兴趣,想要了解更多java实例以及常见问题,敬请关注奇Q工具网。

推荐阅读:

java记事本功能如何实现?实例代码展示

在java中swing有哪些组件?分组布局的含义?

java中AWT和Swing的相同点是什么?不同点是什么?