仿记事本--含源码(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) { }
            }
        }
    }
}

运行结果:

布局:

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

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

 创建文件的结果:

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

 打开的文件在界面显示:

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

 保存到该文件夹:

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

 通过消息弹框对其命名:

 另存为之后的结果:

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java写windows记事本源代码,具体功能如下: 1.文件(F) 可以通过点击菜单或快捷键(alt + F)打开菜单页 1.1新建(N) 菜单内点击或助记符N或快捷键(ctrl + N) 点击后弹出对话框,询问是否保存到***.txt? 点击保存(S):保存文本并关闭,再新建新的文本 点击不保存(N):不保存文本并关闭,再新建新的文本 点击取消:取消新建操作 1.2打开(O) 菜单内点击或助记符O或快捷键(ctrl + O) 点击后弹出对话框,询问是否保存到***.txt? 点击保存(S):保存文本,弹出选择文件对话框 点击不保存(N):不保存文本,弹出选择文件对话框 ==》选择文件对话框: 选择打开(O):就打开新的文本 选择取消:取消打开操作,返回原文本 点击取消:取消打开操作 1.3保存(S) 菜单内点击或助记符S或快捷键(ctrl + S) 点击后保存文本内容 1.4另存为(A) 菜单内点击或助记符A 点击后打开另存为对话框,选择路径和设置文件名 选择保存(S):就会在该路径保存文本,原文本内容不会保存并关闭,打开另存的文本 取消:取消另存为操作,返回原文本 1.5页面设置(U)(只实现页面边距,其他未实现) 菜单内点击或助记符U 点击后打开页面设置对话框:可以设置一下内容 纸张:大小(Z)、来源(S) 方向:纵向(O)、横向(A) 页面边距(毫米):左(L)右(R)上(T)下(B) 页眉(H)、页脚(F)、预览:(图片) 选择确定:保存新的页面设置 选择取消:取消页面设置 1.6打印(P)(改功能未完全实现,使用可能会报错) 菜单内点击或助记符P或快捷键(ctrl + P) 点击后弹出打印对话框 1.7退出(X) 菜单内点击或助记符X 点击后退出本文本文件 2.编辑(E) 可以通过点击菜单或快捷键(alt + E)打开菜单页 2.1撤销(U) 菜单内点击或助记符U或快捷键(ctrl + Z) 响应后返回上一步操作 2.2剪切(T) 菜单内点击或助记符T或快捷键(ctrl + X) 响应后光标选中的内容提取到剪贴板,并删除该内容,光标定位在元初识位置 2.3复制(C) 菜单内点击或助记符C或快捷键(ctrl + C) 响应后光标选中内容提取到剪贴板,光标位置保持不变 2.4粘贴(P) 菜单内点击或助记符P或快捷键(ctrl + V) 响应后光标选中的内容被替换为剪贴板的内容,光标选中刚刚粘贴的内容 2.5删除(L) 菜单内点击或助记符L或快捷键(DEL) 响应后删除光标选中的内容 2.6查找(F) 菜单内点击或助记符F或快捷键(ctrl + F) 响应后弹出查找对话框:输入查找的内容,可以选择区分大小写和选择查找的方向 点击查找之后光标会选中响应的查找内容,没找到会弹出找不到对话框 2.7查找下一个(N) 菜单内点击或助记符N或快捷键(F3) 查找框有内容就直接查找贯标位置以后的内容,查找框没有内容直接弹出查找框 2.8替换(R) 菜单内点击或助记符R或快捷键(ctrl + H) 弹出替换对话框,有全部替换和替换当前两种 当前替换:替换光标选中的内容,光标移动到下一个查找内容上 2.9转到(G) 菜单内点击或助记符G或快捷键(ctrl + G) 在自动换行未选中的情况下,点击之后弹出转到指定行对话框 2.10全选(A) 菜单内点击或助记符A或快捷键(ctrl + A) 响应后选中全部文本内容 2.11时间/日期(D) 菜单内点击或助记符D或快捷键(F5) 在光标选中的内容里修改为当前时间 3.格式(O) 可以通过点击菜单或快捷键(alt + O)打开菜单页 3.1自动换行(W) 菜单内点击或助记符W 选中后,文本会自动换行,且不能点击查看状态栏和转到菜单 3.2字体(F) 菜单内点击或助记符F 弹出字体对话框:可以选择字体(F)、字形(Y)大小(S) 拥有示例和选择脚本,确定后更改全部字体 4.查看(V) 可以通过点击菜单或快捷键(alt + V)打开菜单页 4.1状态栏(S) 菜单内点击或助记符S 在底部会显示光标的起始坐标,第几行第几列 5.帮助(H) 可以通过点击菜单或快捷键(alt + H)打开菜单页 5.1查看帮助(H) 菜单内点击或助记符H 点击弹出帮助文本 5.2关于记事本(A)、 菜单内点击或助记符A 点击弹出关于记事本的对话框 显示它的本信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值