当前位置: 首页 > news >正文

综合实验 电子记事本的设计与实现——Java

综合实验 电子记事本的设计与实现

文章目录

    • 综合实验 电子记事本的设计与实现
      • 一、实验目的
      • 二、实验内容
      • 三、实验要求
      • 四、实验步骤与结果
        • 1.创建菜单栏、菜单项和文本域
        • 2.txt文件过滤器
        • 3.创建方法实现添加菜单和菜单项
        • 4.初始化文本域
        • 5.添加菜单到菜单栏
        • 6.添加菜单项
          • 1)文件
            • a.新建
            • b.打开
            • c.保存
            • d.另存为
            • e.在退出前添加分割符
            • f.退出
          • 2)编辑
            • a.复制
            • b.剪切
            • c.粘贴
          • 3)格式
            • a.字体
            • b.字体颜色
          • 4)关于
        • 7.主方法创建对象
        • 8.完整代码如下

一、实验目的

掌握用户图形界面设计(GUI)的设计方法,了解布局管理器的知识,了解树形分层结构,掌握Java中的控件的使用。

二、实验内容

利用Java中的用户GUI图形界面设计、文件操作、数据库编程等方面的知识,实现电子记事本的设计与实现。

三、实验要求

(1)该实验应能体现本课程中的综合知识;
(2)该电子记事本应具有实用性。
(3)界面友好,操作简单。

四、实验步骤与结果

1.创建菜单栏、菜单项和文本域

    private JMenuBar menuBar;//菜单栏
    private JTextArea textArea = new JTextArea();//文本域
    private JMenu wenjian,bianji,geshi,guanyu;//文件,编辑,格式,关于
    //文件菜单项
    private JMenuItem wenjian_open,wenjian_save,wenjian_new,wenjian_other_save,
    wenjian_exit;//打开,保存,新建,另存,退出
    //编辑菜单项
    private JMenuItem bianji_copy,bianji_cut,bianji_paste;//复制,剪切,粘贴
    //字体菜单项
    private JMenuItem geshi_font,geshi_font_color;//字体,字体颜色
    //关于菜单项
    private JMenuItem guanyu_about;//关于

2.txt文件过滤器

选取目录中的txt文件

 /**
     * txt文件过滤器
     */
    public class FileFilter extends javax.swing.filechooser.FileFilter 
    implements java.io.FileFilter {
        @Override
        public boolean accept(File file) {
            if(file.isDirectory())
                return true;
            else{
                String name = file.getName();
                if(name.endsWith(".txt"))
                    return true;
                else return false;
            }
        }
        @Override
        public String getDescription() {
            return ".txt";
        }
    }

3.创建方法实现添加菜单和菜单项

    //添加菜单
    public JMenu addJManu(String name,JMenuBar menuBar){
        JMenu jMenu = new JMenu(name);
        menuBar.add(jMenu);
        return jMenu;
    }
    //添加菜单项
    public JMenuItem addJmenuItem(String name,JMenu menu){
        JMenuItem jMenuItem = new JMenuItem(name);
        menu.add(jMenuItem);
        return jMenuItem;
    }

4.初始化文本域

        setTitle("MyNotePad");
        setBounds(300,300,600,600);
        menuBar = new JMenuBar();
        this.setJMenuBar(menuBar);
        textArea.getDocument();//获得程序当前有效文档
        textArea.setFont(new Font("楷体",Font.PLAIN,14));//字体
        textArea.setSelectedTextColor(Color.red);//选中字体颜色
        textArea.setCaretColor(Color.BLACK);//光标颜色

        textArea.setWrapStyleWord(true);//是否单词边界换行
        textArea.setLineWrap(true);//是否换行
        add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));

5.添加菜单到菜单栏

        wenjian = this.addJManu("文件(F)",menuBar);
        bianji = this.addJManu("编辑(E)",menuBar);
        geshi = this.addJManu("格式(O)",menuBar);
        guanyu = this.addJManu("关于",menuBar);

6.添加菜单项

1)文件
a.新建
		//新建
		wenjian_new = this.addJmenuItem("新建(N)  Ctrl+N",wenjian);
        wenjian_new.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //设置新文件内容
                textArea.setText("");
            }
        });
b.打开
		//打开
        wenjian_open = this.addJmenuItem("打开(O)  Ctrl+O",wenjian);
        wenjian_open.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try{
                	//设置当前目录
                    jFileChooser.setCurrentDirectory(new File("."));
                    jFileChooser.setFileFilter(new FileFilter());//过滤文件
                    jFileChooser.setAcceptAllFileFilterUsed(false);//全选文件
                    //弹出一个 "Open File" 文件选择器对话框。
                    jFileChooser.showOpenDialog(null);
                    file = jFileChooser.getSelectedFile();//获取已选择目录
                    str = file.getName();//获取目录命
                    int len = (int)(jFileChooser.getSelectedFile()).length();
                    char[] ch = new char[len];
                    FileReader fileReader = new FileReader(file);
                    fileReader.read(ch);
                    str = new String(ch);
                    textArea.setText(str.trim());

                } catch (FileNotFoundException fileNotFoundException) {
                    //fileNotFoundException.printStackTrace();
                    JOptionPane.showMessageDialog(null, fileNotFoundException);
                } catch (IOException ioException) {
                    //ioException.printStackTrace();
                    JOptionPane.showMessageDialog(null, ioException);
                }
            }
        });
c.保存

1.先判断该文件是否存在,如果不存在直接新建目录保存;如果已经存在,直接保存。
2.使用文件过滤器,使文件必须为.txt文件。

		//保存
        wenjian_save = this.addJmenuItem("保存(S)   Ctrl+S",wenjian);
        wenjian_save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //判断当前文件是否存在
                if(file == null){//不存在,新建目录
                    try{
                        jFileChooser = new JFileChooser();
                        jFileChooser.setCurrentDirectory(null);//设置当前目录
                        str = JOptionPane.showInputDialog("输入文件名")+".txt";
                        jFileChooser.setSelectedFile(new File(str));
                        jFileChooser.setFileFilter(new FileFilter());//过滤文件
                        //获取当前对象x
                        int temp = jFileChooser.showSaveDialog(null);
                        if (temp == jFileChooser.APPROVE_OPTION) {//temp = 0
                            if(file != null)
                                file.delete();
                            file = 
                            new File(jFileChooser.getCurrentDirectory(),str);
                            file.createNewFile();
                            FileWriter fileWriter = new FileWriter(file);
                            fileWriter.write(textArea.getText());
                            fileWriter.close();
                        }
                    }
                    catch (Exception e1){
                        JOptionPane.showMessageDialog(null, e1);
                    }
                }
                else{
                    try{
                        FileWriter fileWriter = new FileWriter(file);
                        fileWriter.write(textArea.getText());
                        fileWriter.close();
                    }
                    catch (Exception e1){
                        JOptionPane.showMessageDialog(null, e1);
                    }
                }
            }
        });
d.另存为

另存和保存的步骤基本一致。

		//另存为
        wenjian_other_save = this.addJmenuItem("另存为",wenjian);
        wenjian_other_save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jFileChooser = new JFileChooser();
                jFileChooser.setCurrentDirectory(new File("."));//设置当前目录
                try{
                    if(file == null)
                        str = JOptionPane.showInputDialog("输入文件名")+".txt";
                    else
                        str = file.getName();
                    jFileChooser.setSelectedFile(new File(str));
                    jFileChooser.setFileFilter(new FileFilter());//过滤文件
                    int temp = jFileChooser.showSaveDialog(null);//获取当前对象
                    if (temp == jFileChooser.APPROVE_OPTION) {//temp = 0
                        if(file != null)
                            file.delete();
                        file = new File(jFileChooser.getCurrentDirectory(),str);
                        file.createNewFile();
                        FileWriter fileWriter = new FileWriter(file);
                        fileWriter.write(textArea.getText());
                        fileWriter.close();
                    }
                }
                catch (Exception e1){
                    JOptionPane.showMessageDialog(null, e1);
                }
            }
        });
e.在退出前添加分割符
		//在退出前添加分割符
        wenjian.addSeparator();
f.退出
		//退出
        wenjian_exit = this.addJmenuItem("退出(X)",wenjian);
        wenjian_exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int state = JOptionPane.showConfirmDialog
                (myNotePad, "请确定是否退出?");
                if (state == JOptionPane.OK_OPTION)//OK_OPTION==0
                    System.exit(0);
            }
        });

2)编辑
a.复制
		//复制
        bianji_copy = this.addJmenuItem("复制(C)  Ctrl+C",bianji);
        bianji_copy.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.copy();
            }
        });
b.剪切
		//剪切
        bianji_cut = this.addJmenuItem("剪切(T)  Ctrl+X",bianji);
        bianji_cut.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.cut();
            }
        });
c.粘贴
		//粘贴
        bianji_paste = this.addJmenuItem("粘贴(P)  Ctrl+V",bianji);
        bianji_paste.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.paste();
            }
        });
3)格式
a.字体
		//字体
        geshi_font = this.addJmenuItem("字体",geshi);
        geshi_font.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取图形环境
                GraphicsEnvironment graphicsEnvironment = 
                GraphicsEnvironment.getLocalGraphicsEnvironment();
                JList fontNames = new 
                JList(graphicsEnvironment.getAvailableFontFamilyNames());
                int sele = JOptionPane.showConfirmDialog
	(null,new JScrollPane(fontNames),"请选择",JOptionPane.OK_CANCEL_OPTION);
                Object seleFont = fontNames.getSelectedValue();
                if(sele == JOptionPane.OK_OPTION && seleFont != null)
                    textArea.setFont(new Font(fontNames.getSelectedValue()
                    .toString(),Font.PLAIN,14));
            }
        });

b.字体颜色
		//字体颜色
        geshi_font_color = this.addJmenuItem("颜色",geshi);
        geshi_font_color.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Color color = JColorChooser.showDialog(null,"颜色选择",
                Color.BLACK);
                textArea.setForeground(color);
            }
        });
4)关于
		//关于
        guanyu_about = this.addJmenuItem("关于MyNotePad",guanyu);
        guanyu_about.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,"MyNotePad\n开发者:
                【信计2102——子麟】", 
                "关于",JOptionPane.PLAIN_MESSAGE);
            }
        });

7.主方法创建对象

public static void main(String[] args) {
        new MyNotePad().setVisible(true);//设置窗体可见
    }

8.完整代码如下

package NotePad;

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

public class MyNotePad extends JFrame {
    private JMenuBar menuBar;
    private JTextArea textArea = new JTextArea();
    private JMenu wenjian,bianji,geshi,guanyu;//文件,编辑,格式,关于
    private JMenuItem wenjian_open,wenjian_save,wenjian_new,
    wenjian_other_save,wenjian_exit;//打开,保存,新建,另存,退出
    private JMenuItem bianji_copy,bianji_cut,bianji_paste;//复制,剪切,粘贴
    private JMenuItem geshi_font,geshi_font_color;//字体
    private JMenuItem guanyu_about;//关于
    private JFileChooser jFileChooser = new JFileChooser();
    private File file;
    private String str = "";

    /**
     * txt文件过滤器
     */
    public class FileFilter extends javax.swing.filechooser.FileFilter
     implements java.io.FileFilter {
        @Override
        public boolean accept(File file) {
            if(file.isDirectory())
                return true;
            else{
                String name = file.getName();
                if(name.endsWith(".txt"))
                    return true;
                else return false;
            }
        }
        @Override
        public String getDescription() {
            return ".txt";
        }
    }

    //添加菜单
    public JMenu addJManu(String name,JMenuBar menuBar){
        JMenu jMenu = new JMenu(name);
        menuBar.add(jMenu);
        return jMenu;
    }
    //添加菜单项
    public JMenuItem addJmenuItem(String name,JMenu menu){
        JMenuItem jMenuItem = new JMenuItem(name);
        menu.add(jMenuItem);
        return jMenuItem;
    }
    //初始化
    MyNotePad myNotePad;
    {
        Container contentPane = getContentPane();
        setTitle("MyNotePad");
        setBounds(300,300,600,600);
        menuBar = new JMenuBar();
        this.setJMenuBar(menuBar);
        textArea.getDocument();//获得程序当前有效文档
        textArea.setFont(new Font("楷体",Font.PLAIN,14));//字体
        textArea.setSelectedTextColor(Color.red);//选中字体颜色
        textArea.setCaretColor(Color.BLACK);//光标颜色

        textArea.setWrapStyleWord(true);//是否单词边界换行
        textArea.setLineWrap(true);//是否换行
        add(new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
        //添加菜单到菜单栏
        wenjian = this.addJManu("文件(F)",menuBar);
        bianji = this.addJManu("编辑(E)",menuBar);
        geshi = this.addJManu("格式(O)",menuBar);
        guanyu = this.addJManu("关于",menuBar);

        /**
         * 文件
         */
        //新建
        wenjian_new = this.addJmenuItem("新建(N)  Ctrl+N",wenjian);
        wenjian_new.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //设置新文件内容
                textArea.setText("");
            }
        });

        //打开
        wenjian_open = this.addJmenuItem("打开(O)  Ctrl+O",wenjian);
        wenjian_open.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try{
                //设置当前目录
                    jFileChooser.setCurrentDirectory(new File("."));
                    jFileChooser.setFileFilter(new FileFilter());//过滤文件
                    jFileChooser.setAcceptAllFileFilterUsed(false);//全选文件
                    //弹出一个 "Open File" 文件选择器对话框。
                    jFileChooser.showOpenDialog(null);
                    file = jFileChooser.getSelectedFile();//获取已选择目录
                    str = file.getName();//获取目录命
                    int len = (int)(jFileChooser.getSelectedFile()).length();
                    char[] ch = new char[len];
                    FileReader fileReader = new FileReader(file);
                    fileReader.read(ch);
                    str = new String(ch);
                    textArea.setText(str.trim());

                } catch (FileNotFoundException fileNotFoundException) {
                    //fileNotFoundException.printStackTrace();
                    JOptionPane.showMessageDialog(null, fileNotFoundException);
                } catch (IOException ioException) {
                    //ioException.printStackTrace();
                    JOptionPane.showMessageDialog(null, ioException);
                }
            }
        });

        //保存
        wenjian_save = this.addJmenuItem("保存(S)   Ctrl+S",wenjian);
        wenjian_save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //判断当前文件是否存在
                if(file == null){//不存在,新建目录
                    try{
                        jFileChooser = new JFileChooser();
                        jFileChooser.setCurrentDirectory(null);//设置当前目录
                        str = JOptionPane.showInputDialog("输入文件名")+".txt";
                        jFileChooser.setSelectedFile(new File(str));
                        jFileChooser.setFileFilter(new FileFilter());//过滤文件
                        //获取当前对象
                        int temp = jFileChooser.showSaveDialog(null);
                        if (temp == jFileChooser.APPROVE_OPTION) {//temp = 0
                            if(file != null)
                                file.delete();
                            file = new 
                            File(jFileChooser.getCurrentDirectory(),str);
                            file.createNewFile();
                            FileWriter fileWriter = new FileWriter(file);
                            fileWriter.write(textArea.getText());
                            fileWriter.close();
                        }
                    }
                    catch (Exception e1){
                        JOptionPane.showMessageDialog(null, e1);
                    }
                }
                else{
                    try{
                        FileWriter fileWriter = new FileWriter(file);
                        fileWriter.write(textArea.getText());
                        fileWriter.close();
                    }
                    catch (Exception e1){
                        JOptionPane.showMessageDialog(null, e1);
                    }
                }
            }
        });

        //另存为
        wenjian_other_save = this.addJmenuItem("另存为",wenjian);
        wenjian_other_save.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jFileChooser = new JFileChooser();
                jFileChooser.setCurrentDirectory(new File("."));//设置当前目录
                try{
                    if(file == null)
                        str = JOptionPane.showInputDialog("输入文件名")+".txt";
                    else
                        str = file.getName();
                    jFileChooser.setSelectedFile(new File(str));
                    jFileChooser.setFileFilter(new FileFilter());//过滤文件
                    int temp = jFileChooser.showSaveDialog(null);//获取当前对象
                    if (temp == jFileChooser.APPROVE_OPTION) {//temp = 0
                        if(file != null)
                            file.delete();
                        file = 
                        new File(jFileChooser.getCurrentDirectory(),str);
                        file.createNewFile();
                        FileWriter fileWriter = new FileWriter(file);
                        fileWriter.write(textArea.getText());
                        fileWriter.close();
                    }
                }
                catch (Exception e1){
                    JOptionPane.showMessageDialog(null, e1);
                }
            }
        });

        //在退出前添加分割符
        wenjian.addSeparator();
        //退出
        wenjian_exit = this.addJmenuItem("退出(X)",wenjian);
        wenjian_exit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int state = JOptionPane.showConfirmDialog
                (myNotePad, "请确定是否退出?");
                if (state == JOptionPane.OK_OPTION)//OK_OPTION==0
                    System.exit(0);
            }
        });

        /**
         * 编辑
         */
        //复制
        bianji_copy = this.addJmenuItem("复制(C)  Ctrl+C",bianji);
        bianji_copy.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.copy();
            }
        });

        //剪切
        bianji_cut = this.addJmenuItem("剪切(T)  Ctrl+X",bianji);
        bianji_cut.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.cut();
            }
        });

        //粘贴
        bianji_paste = this.addJmenuItem("粘贴(P)  Ctrl+V",bianji);
        bianji_paste.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                textArea.paste();
            }
        });

        /**
         * 格式
         */
        //字体
        geshi_font = this.addJmenuItem("字体",geshi);
        geshi_font.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //获取图形环境
                GraphicsEnvironment graphicsEnvironment = 
                GraphicsEnvironment.getLocalGraphicsEnvironment();
                JList fontNames = new 
                JList(graphicsEnvironment.getAvailableFontFamilyNames());
                int sele = JOptionPane.showConfirmDialog(null,
                new JScrollPane(fontNames),
                "请选择",JOptionPane.OK_CANCEL_OPTION);
                Object seleFont = fontNames.getSelectedValue();
                if(sele == JOptionPane.OK_OPTION && seleFont != null)
                    textArea.setFont(new 
                    Font(fontNames.getSelectedValue().toString(),Font.PLAIN,14));
            }
        });

        //字体颜色
        geshi_font_color = this.addJmenuItem("颜色",geshi);
        geshi_font_color.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Color color = JColorChooser.showDialog(null,"颜色选择",
                Color.BLACK);
                textArea.setForeground(color);
            }
        });
        /**
         * 关于
         */
        //关于
        guanyu_about = this.addJmenuItem("关于MyNotePad",guanyu);
        guanyu_about.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null,
                "MyNotePad\n开发者:【信计2102——子麟】", 
                "关于",JOptionPane.PLAIN_MESSAGE);
            }
        });
        this.setResizable(true); // 窗体是否可变
    }

    public static void main(String[] args) {
        new MyNotePad().setVisible(true);//设置窗体可见
    }
}

Ps:仅供参考!

相关文章:

  • CSS 选择器
  • 进程的调度
  • 程序员注意!35岁前,别靠死工资过日子
  • Ubuntu22.2下C语言编程实现,首次,最佳适应算法
  • SpringBoot: Controller层的优雅实现
  • C语言学习笔记(十)
  • 前端框架Vue语法部分(一)
  • 进程创建进程终止进程等待
  • 【Linux】一万七千字详解 —— 基本指令(二)
  • 多维时序 | MATLAB实现CNN-GRU多变量时间序列预测
  • 为了摸鱼,我开发了一个工具网站
  • jenkins 共用宿主机中的docker自动化部署
  • 如何借助现有股票量化交易平台编写策略和回测分析
  • 腾讯产品经理的自动化工作流
  • 【Pygame实战】这游戏有毒,刷爆朋友圈:小编已与病毒版贪吃蛇大战了三百回合,最高分339?
  • Linux基本指令集合
  • Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】
  • vue.js毕业设计,基于vue.js前后端分离外卖点餐系统(H5移动项目) 开题报告
  • lazada买家订单导出
  • OTA: Optimal Transport Assignment for Object Detection原理与代码解读
  • 乌美签署矿产协议
  • 耶路撒冷发生山火,以防长宣布紧急状态
  • 广东省副省长刘红兵跨省调任湖南省委常委、宣传部长
  • 自称“最美”通缉犯出狱当主播?央广网:三观怎能跟着“五官”跑
  • 经济日报:多平台告别“仅退款”,规则调整有何影响
  • 东北财大“一把手”调整:方红星任校党委书记,汪旭晖任校长