摘 要

为了使自己熟悉Java编译,了解更多的面向对象语言的编程策略。进而,深入了解Java语言的操作、及原理等。因此我开发了一个记事本,使自己可以巩固知识,加深记忆。设计一个简易记事本,能够记录使用者输入的信息,同时可以实现保存输入的信息,以方便后期查看。同时可以支持保存后后期的修改,那就是插入文件后再次修改。在此款简易记事里面,可以写文档,同时也可以保存、删除等功能。可以在记事本里面更换字体颜色,字体也可以变换大小。同时也可以打开文件夹里面的文档。里面字体设置的是宋体。

关键词  JAVA  io流 容器 组件  GUI

第一章 概述

1.1 引言 

   记事本是一个很用的程序,主要包括对文件的储存、修改等编辑功能;还有复制、粘贴等。同时在此记事本可以改变字体大小颜色等。

1.2 设计背景

1.2.1Java简介

 Java具有以下特点,是目前软件设计中优秀的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Internet的开发。Java确实具备了“一旦携程处处可用”的特点,这也是Java最初风靡全球的原因。

记事本Java实验报告 java记事本设计思路_Java

1.2.2Java语言特点

  1. 简单性:因为Java在C++之上设计出来的,设计者把C++的一些特性去掉了,这些特性在实际开发中,程序员也很少用到。
  2. 面向对象:Java是一款面向对象化语言。
  3. 平台无关:Java语言和其他语言相比,最大的优势就是编写的软件能在执行码上兼容,在所有的计算机上运行。(只要平台提供了Java运行的环境,Java编写的软件就能在其上运行。)
  4. 多线程:内置对多线程的支持。多线程允许同时完成多个任务。
  5. 多态

第二章 总体设计

2.1  界面设计

在主界面中设计一个JFrame 容器,并在其中加入文本域、下拉菜单等。

2.2 功能设计

首先建立框架,确定好设计的内容。根据内容找到相应的资料后,开始编写代码。

框架流程图

记事本Java实验报告 java记事本设计思路_课程设计_02

2.3 系统功能设计

2.3.1 功能设计

   在下拉菜单中加入子菜单进行监视,分别实现对文件的操作功能。点击不同的菜单选项时,进行不同的操作。

功能框架流程图

记事本Java实验报告 java记事本设计思路_java_03

2.3.3 代码设计

  编写每个控件的相关代码,并进行调试。

  创建了一个标题为“简易记事本”的窗口,包括菜单条,菜单,菜单项。找准每个大类和他相对应的子类然后对其实现功能。

  1. 对文件的新建、打开、保存、另存、退出。
  2. 对文本复制、粘贴等
  3. 对字体的大小改变,颜色改变

第三章 详细设计

3.1 开发工具的选用及其介绍

3.1.1界面设计

先创建一个GUI界面,再往里面依次填东西,首先是窗口,设置窗口的大小,填入文本区域,设置在里面的字体,添面板、菜单条。菜单条里面增加菜单,菜单里面加入菜单项,然后分别给菜单项设置一些功能。

3.1.2 界面调试

确定主窗体,设置窗体的属性,对窗体进行布局,加入所需控件并对控件进行初始化。在完成加入菜单控件后,不能缺少setJMenuBar(cdl); 因为这是让菜单条可见。把menubar设置到JFame中。

 

3.1.2 界面调试

确定主窗体,设置窗体的属性,对窗体进行布局,加入所需控件并对控件进行初始化。在完成加入菜单控件后,不能缺少setJMenuBar(cdl); 因为这是让菜单条可见。把menubar设置到JFame中。

3.2 详细模块设计

3.2.1打开、使用

功能说明

利用代码运行成功后,打开窗口。既可以输入文字。在输入文字的同时可以选择文字的颜色、字体等。完成后可以选择保存等功能。在文本区域可以选择复制粘贴等功能来完成最后的结果。

程序代码

import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;
public class note {
	 public static void main(String[] args)	{
		 creatGUI();
	 }
	    public static void creatGUI() {
	        //创建可视化窗口/
	        JFrame f = new JFrame("记事本");
	        //设定显示位置,左上角为(0,0),根据笔记本电脑的显示分辨率设置成在正中间显示
	        f.setLocation(200, 100);//这是显示窗口的左上角坐标
	        //设定窗口大小为屏幕1/2倍(电脑显示分辨率)
	        f.setSize(800, 540);//我电脑显示分辨率为1920*1080
	      
	        //创建文本域用来打字显示出来的
	        JTextArea WBY = new JTextArea("");
	        //这里可以输入东西到时候打开窗体自动显示出来
	        WBY.setFont(new Font("", Font.BOLD, 25));
	        //设置文本域为自动换行
	        WBY.setLineWrap(true);
	        //将文本域添加到含有下拉框的面板中,因为文本区不带滚动条,
	        //需要把文本区放到滚动窗格中,
	        JScrollPane MB = new JScrollPane(WBY);
	        //将含有下拉框的面板放入内容面板中
	        f.add(MB);
	        //创建一个菜单栏,实例化
	        JMenuBar cdl = new JMenuBar();
	        //创建菜单栏上的5个菜单并且设置字体和大小
	        JMenu m1 = new JMenu("文件");
	        JMenu m2 = new JMenu("编辑");
	        JMenu m3 = new JMenu("字体大小");
	        JMenu m4 = new JMenu("字体颜色");
	        JMenu m5 = new JMenu("帮助文档");
	        m1.setFont(new Font("", Font.BOLD, 15));
	        m2.setFont(new Font("", Font.BOLD, 15));
	        m3.setFont(new Font("", Font.BOLD, 15));
	        m4.setFont(new Font("", Font.BOLD, 15));
	        m5.setFont(new Font("", Font.BOLD, 15));
	        
	        //在菜单的基础上创建下拉可选菜单项按钮
	        JMenuItem x1 = new JMenuItem("新建");
	        JMenuItem x2 = new JMenuItem("保存");
	        JMenuItem x3 = new JMenuItem("打开");
	        JMenuItem x4 = new JMenuItem("退出");
	        JMenuItem x5 = new JMenuItem("复制");
	        JMenuItem x6 = new JMenuItem("粘贴");
	        JMenuItem x7 = new JMenuItem("裁剪");
	        JMenuItem x8 = new JMenuItem("删除");
	        JMenuItem x9 = new JMenuItem("大");
	        JMenuItem x10 = new JMenuItem("中");
	        JMenuItem x11 = new JMenuItem("小");
	        JMenuItem x12 = new JMenuItem("红色");
	        JMenuItem x13 = new JMenuItem("绿色");
	        JMenuItem x14 = new JMenuItem("蓝色");
	        JMenuItem x15 = new JMenuItem("黑色");
	        JMenuItem x16 = new JMenuItem("百度");
	        //为下拉可选菜单项设置字体和大小
	        x1.setFont(new Font("s", Font.BOLD, 20));
	        x2.setFont(new Font("s", Font.BOLD, 20));
	        x3.setFont(new Font("s", Font.BOLD, 20));
	        x4.setFont(new Font("s", Font.BOLD, 20));
	        x5.setFont(new Font("s", Font.BOLD, 20));
	        x6.setFont(new Font("s", Font.BOLD, 20));
	        x7.setFont(new Font("s", Font.BOLD, 20));
	        x8.setFont(new Font("s", Font.BOLD, 20));
	        x9.setFont(new Font("s", Font.BOLD, 40));
	        x10.setFont(new Font("s", Font.BOLD, 30));
	        x11.setFont(new Font("s", Font.BOLD, 20));
	        x12.setFont(new Font("s", Font.BOLD, 20));
	        x13.setFont(new Font("s", Font.BOLD, 20));
	        x14.setFont(new Font("s", Font.BOLD, 20));
	        x15.setFont(new Font("s", Font.BOLD, 20));
	        x16.setFont(new Font("s", Font.BOLD, 20));
	        //给颜色下拉菜单项分别设置相应的背景色,这样展现就会直观一点了
	        x12.setBackground(Color.RED);
	        x13.setBackground(Color.GREEN);
	        x14.setBackground(Color.BLUE);
	        x15.setBackground(Color.BLACK);
	        //实现新建记事本按钮的功能
	        x1.addActionListener(e -> {
	            creatGUI();
	        });//再次调用该方法创建另外一个记事本
	      
	        //实现保存记事本按钮的功能
	        x2.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e2) {
	                //创建一个窗体并且设置窗体标题和保存功能
	                FileDialog fileDialog = new FileDialog(f, "保存文件至", FileDialog.SAVE);
	                //保存文件的对话框设置为可见
	                fileDialog.setVisible(true);
	                //获取保存的路径和设置的文件名
	                String absPath = fileDialog.getDirectory() + fileDialog.getFile();
	                try {//用来检测是否设置了保存路径
	                    //设置输出文件名为保存的路径下面的文件名
	                    BufferedWriter wr = new BufferedWriter(new FileWriter(absPath));
	                    //获取文本域字符串
	                    String s = WBY.getText();
	                    //开始写入
	                    wr.write(s);
	                    //写完关闭
	                    wr.close();
	                } catch (IOException e) {
	                    e.printStackTrace();
	                }
	            }
	        });
	        //实现打开记事本按钮的功能
	        x3.addActionListener(new ActionListener() {
	            public void actionPerformed(ActionEvent e2) {
	                //创建一个窗体并且设置窗体标题和打开功能
	                FileDialog fileDialog = new FileDialog(f, "打开文件", FileDialog.LOAD);
	                //打开文件的对话框设置为可见
	                fileDialog.setVisible(true);
	                //获取打开的路径和设置的文件名
	                String absPath = fileDialog.getDirectory() + fileDialog.getFile();
	                try {//用来检测是否设置了打开路径
	                    //设置读入文件名为打开的路径下面的文件名
	                    BufferedReader re = new BufferedReader(new FileReader(absPath));
	                    String line;
	                    while ((line = re.readLine()) != null)
	                        //只要文件中不为空就不断追加到文本框中
	                        WBY.append(line + '\n');
	                    //读取完毕结束
	                    re.close();
	                } catch (Exception e) {
	                    e.printStackTrace();
	                }
	            }
	        });
	        //实现退出记事本按钮的功能
	        x4.addActionListener(e -> System.exit(0));
	        //调用文件工具箱下的系统剪贴板方法
	        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
	        //实现复制文本按钮的功能
	        x5.addActionListener(e -> {
	            //将选中的文本内容存入text中
	            String text = WBY.getSelectedText();
	            //传送到字符串里面存着
	            StringSelection selection = new StringSelection(text);
	            //将得到的内容放入到剪切板中
	            clipboard.setContents(selection, null);
	        });
	        //实现粘贴文本按钮的功能
	        x6.addActionListener(e -> {
	            //获取系统剪贴板中的内容
	            Transferable text = clipboard.getContents(null);
	            //判断剪贴板中的内容是否支持文本
	            if (text.isDataFlavorSupported(DataFlavor.stringFlavor)) {
	                try {
	                    //强制转换剪贴板中的内容
	                    String text1 = (String) text.getTransferData(DataFlavor.stringFlavor);
	                    //获取当前光标的位置
	                    int n = WBY.getCaretPosition();
	                    //插入复制的内容到文本框的光标后面
	                    WBY.insert(text1, n);
	                } catch (Exception e2) {
	                    e2.printStackTrace();
	                }
	            }
	        });
	        //实现裁剪文本按钮的功能
	        x7.addActionListener(e -> {
	            //将得到的选择文本内容存入text中
	            String text = WBY.getSelectedText();
	            //传送到字符串里面存着
	            StringSelection selection = new StringSelection(text);
	            //将得到的内容放到剪切板中
	            clipboard.setContents(selection, null);
	            //将选中文本start到end之间的内容替换为空白""
	            WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
	        });
	        //实现删除文本按钮的功能
	        x8.addActionListener(e -> {
	            //将选中文本start到end之间的内容替换为空白
	            WBY.replaceRange("", WBY.getSelectionStart(), WBY.getSelectionEnd());
	        });
	        //实现字体变大的功能
	        x9.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 40));
	        });
	        //实现字体变中等大小的功能
	        x10.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 30));
	        });
	        //实现字体变小的功能
	        x11.addActionListener(e -> {
	            WBY.setFont(new Font("", Font.BOLD, 20));
	        });
	        //实现字体颜色变红的功能
	        x12.addActionListener(e -> {
	            WBY.setForeground(Color.RED);
	        });
	        //实现字体颜色变绿的功能
	        x13.addActionListener(e -> {
	            WBY.setForeground(Color.GREEN);
	        });
	        //实现字体颜色变蓝的功能
	        x14.addActionListener(e -> {
	            WBY.setForeground(Color.BLUE);
	        });
	        //实现字体颜色变黑的功能
	        x15.addActionListener(e -> {
	            WBY.setForeground(Color.BLACK);
	        });
	        //实现打开帮助文档的功能
	        x16.addActionListener(e -> {
	            //创建消息提示框,包括显示内容和弹窗标题
	            JOptionPane.showMessageDialog(f,
	                    "百度!", "提示", JOptionPane.INFORMATION_MESSAGE);
	        });
	        //分别给5个菜单添加各自的下拉菜单项
	        m1.add(x1);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x2);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x3);
	        m1.addSeparator();//两个菜单项之间添加界线
	        m1.add(x4);
	        m2.add(x5);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x6);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x7);
	        m2.addSeparator();//两个菜单项之间添加界线
	        m2.add(x8);
	        m3.add(x9);
	        m3.addSeparator();//两个菜单项之间添加界线
	        m3.add(x10);
	        m3.addSeparator();//两个菜单项之间添加界线
	        m3.add(x11);
	        m4.add(x12);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x13);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x14);
	        m4.addSeparator();//两个菜单项之间添加界线
	        m4.add(x15);
	        m5.add(x16);
	        //添加这5个菜单到菜单栏
	        cdl.add(m1);
	        cdl.add(m2);
	        cdl.add(m3);
	        cdl.add(m4);
	        cdl.add(m5);
	        //给窗体添加完善好的菜单栏
	        f.setJMenuBar(cdl);
	        //记事本设置为可见
	        f.setVisible(true);
	        //点击×号结束应用程序
	        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	    }
	
}