仿记事本--含源码(java版)(基础功能版)

题目:

掌握常用组件的基本操作以及输入输出流的使用,并用相关知识设置一个仿记事本软件,能够实现新建、打开、保存和另存为等基本功能。

设计思路:

1.明确题目要求的功能:新建文件、打开文件、保存文件、另存为文件

2.了解记事本的操作:题目较为简单明了--仿记事本,因此我们便要大致了解记事本是什么样的,其基本模板便是左上角为功能区,有一个文本区,这个是最直观的表示。因此,我们也选择模仿这个布局。

3.通过该图片,来设置我们的页面布局:我们可以发现其功能都是以菜单形式展示出来,而我们所需要完成的功能都在文件这一菜单下,因此我们也采取菜单组件对其进行设计,我们创建四个菜单项itemNew、itemOpen、itemSave、itemSaveAs分别代表新建、打开、保存和另存为四个功能,之后建立一个菜单menu,将这些菜单项添加到菜单中,最后将菜单加入到菜单条menuBar中即可;除此我们通过创建JTextArea类的对象area来实现上图文本区的功能;最后对四个菜单项通过addActionListener()方法添加事件监听即可。以上就是对窗体基本的页面布局。

4.实现功能:通过使用记事本我们很容易发现一点,记事本是需要和本机文件进行交互的,即可视化选择文件及选择文件夹,在这里,我们便要使用Java提供的JFileChooser类,该类可以创建文件对话框,让我们能够在可视化界面对文件进行交互;文件对话框有三种可见方法,showDialog()、showSaveDialog()、showOpenDialog(),后面两个方法为保存和打开的可视化界面,那么我们在写打开和保存的时候也可以直接使用这两个方法,在实现新建和另存为时,我们需要自定义文件对话框,需要使用showDialog()方法,在该方法中,需要传递参数showDialog(Component a,String name);前面的参数为一个组件,通常使用this即可,后面的name表示我们定义的名字,我对其分别定义为“新建”和“另存为”来对应这两个功能。在实现了这个可视化操作之后,后面的就比较简单了,只需要通过IO流对其进行读写操作即可,在这里面我使用的是缓冲流读写,可以按行读取,较为方便。

知识储备:

该程序难度偏中低等,可以作为我们学习完窗体和IO流之后对我们的小测试,涉及到的知识点如下:

1.组件的常规操作:该问题中设计到的组件不多,所以可以多研究一下,怎么写能够使自己的布局思路更加清晰,用来锻炼自己的思维比价合适;

2.IO流的读写操作:该题目涉及到对文本的读取等操作,了解IO流的基本知识便可以,没有难度较大的知识点;

3.学会使用文本选择框:在文本选择框中存在比较多的方法,要熟悉这些方法的使用,能够对我们的代码做到全部理解。

代码:

//主类
package Demo_24_shiyan;

/**
 * @ClassName 主类
 * @Description TODO
 * @Author 今夕河西
 * @Date 2022-09-30 19:10
 * @Version 1.0
 **/
public class Main {
    public static void main(String[] args) {
        Txt_Text win = new Txt_Text();
        win.setTitle("记事本");
    }
}

//窗体事件类
package Demo_24_shiyan;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

/**
 * @ClassName 仿记事本
 * @Description TODO:设计一个仿记事本软件,实现新建、打开、保存、另存为等基本功能
 * @Author 今夕河西
 * @Date 2022-09-30 19:08
 * @Version 1.0
 **/
public class Txt_Text extends JFrame implements ActionListener {
    //创建组件
    JMenuBar menuBar;   //菜单条
    JMenu menu; //菜单
    JMenuItem itemNew,itemOpen,itemSave,itemSaveAs; //菜单项:新建、打开、保存、另存为
    JTextArea area; //文本区:展示内容的地方
    JFileChooser fileDialog;    //创建文件对话框
    BufferedReader in;  //缓冲流读入
    FileReader fileReader;  //文件读入
    BufferedWriter out; //缓冲流写出
    FileWriter fileWriter;  //文件写出

    Txt_Text () {
        init();
        setSize(300,400);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    void init() {
        //文本区实例化
        area = new JTextArea(10,10);
        area.setFont(new Font("宋体",Font.PLAIN,14)); //设置文本格式
        add(new JScrollPane(area),BorderLayout.CENTER);

        //菜单区域实例化
        menuBar = new JMenuBar();
        menu = new JMenu("功能");
        itemNew = new JMenuItem("新建");
        itemOpen = new JMenuItem("打开");
        itemSave = new JMenuItem("保存");
        itemSaveAs = new JMenuItem("另存为");
        itemNew.addActionListener(this);    //添加事件
        itemOpen.addActionListener(this);
        itemSave.addActionListener(this);
        itemSaveAs.addActionListener(this);
        menu.add(itemNew);
        menu.add(itemOpen);
        menu.add(itemSave);
        menu.add(itemSaveAs);
        menuBar.add(menu);
        setJMenuBar(menuBar);

        //文件对话框实例化
        fileDialog = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("txt文件","txt");
        fileDialog.setFileFilter(filter);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //完成对事件的操作
        if (e.getSource() == itemNew) { //新建功能
            int state = fileDialog.showDialog(this,"新建");   //打开文件对话框
            if (state == JFileChooser.APPROVE_OPTION) {
                File dir = fileDialog.getCurrentDirectory();    //获取当前所选择界面的路径
                //通过输入对话框来为文件命名
                String str = JOptionPane.showInputDialog(this,"请输入文件名:",JOptionPane.PLAIN_MESSAGE)+".txt";
                File file = new File(dir,str);
                if(!file.exists()) {    //查看改文件夹下是否有改文件,没有则新建文件
                    try {
                        file.createNewFile();
                    }
                    catch (IOException ee) { }
                }
            }
        }

        if (e.getSource() == itemOpen) {    //打开功能
            int state = fileDialog.showOpenDialog(this);
            if (state == JFileChooser.APPROVE_OPTION) {
                area.setText(null); //先把文本区域置空
                try {
                    File dir = fileDialog.getCurrentDirectory();    //获取当前选择界面的路径
                    String name = fileDialog.getSelectedFile().getName();   //获取当前选择的文件的名称
                    File file = new File(dir,name); //获取选择的文件
                    fileReader = new FileReader(file);  //文件读入
                    in = new BufferedReader(fileReader);    //通过缓冲流读取文件内容
                    String s = null;
                    while ((s = in.readLine()) != null) {   //逐行读取文件
                        area.append("\n" + s);  //将读取到的内容写入到创建的文本区内进行打开
                    }
                    in.close();
                    fileReader.close();
                }
                catch (IOException ee) { }
            }
        }

        if (e.getSource() == itemSave) {    //保存功能
            int state = fileDialog.showSaveDialog(this);
            if (state == JFileChooser.APPROVE_OPTION) {
                try {
                    File dir = fileDialog.getCurrentDirectory();    //获取当前选择界面的路径
                    String name = fileDialog.getSelectedFile().getName();
                    File file = new File(dir,name);
                    fileWriter = new FileWriter(file);
                    out = new BufferedWriter(fileWriter);
                    out.write(area.getText());
                    out.close();
                    fileWriter.close();
                }
                catch (IOException ee) { }
            }
        }

        if (e.getSource() == itemSaveAs) {  //另存为功能
            int state = fileDialog.showDialog(this,"另存为");
            if (state == JFileChooser.APPROVE_OPTION) {
                File dir = fileDialog.getCurrentDirectory();
                String str = JOptionPane.showInputDialog(this,"请输入文件名:",JOptionPane.PLAIN_MESSAGE)+".txt";
                File file = new File(dir,str);
                try {
                    file.createNewFile();   //新建文件
                    fileWriter = new FileWriter(file);
                    out = new BufferedWriter(fileWriter);
                    out.write(area.getText());  //把内容写入到新建的文件中,完成另存
                    out.close();
                    fileWriter.close();
                }
                catch (IOException ee) { }
            }
        }
    }
}

运行结果:

布局:

 新建功能的文件对话框界面:

 通过输入消息框对文件进行命名

 创建文件的结果:

 打开功能文件对话框界面:

 打开的文件在界面显示:

 保存功能文件对话框界面:

 保存到该文件夹:

 另存为功能文件选择框界面:

 通过消息弹框对其命名:

 另存为之后的结果: