基于JAVA的记事本

WeAreOne

发布日期: 2018-11-04 15:19:13 浏览量: 2713
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、绪论

1.1 引言

现如今,电脑已经成为了每家每户甚至是每个人手头都必有的一种实用性工具,它改变了人们的生活,大大提高了人们的工作效率。在此基础上,电脑端的记事本应用一直是每台电脑所必备的实用性应用,不管是在台式电脑、笔记本电脑或者平板电脑上,都能看到它的身影。其功能基本有如下几种:文件、编辑、格式、查看、帮助,每个功能下又有多个子功能,为使用者提供了多种编辑上的便利,基本能满足人们记事的需求,特别是快速笔记。正因为它的这些特点,才让它成为每台电脑中必不可少的成分。

1.2 编写目的

电脑端记事本是每台电脑的标配,有相当大的实用性,方便人们平时的记事之用,尤其是在快速笔记这方面,更是有非常大的作用,基本能满足人们的记事需求,有很大的开发及继续完善开发的意义。

基于记事本的诸多优点,本课程设计针对电脑端的记事本进行开发设计,并在原有基础上进行完善,使它的功能更完善、更人性化及更实用化。

1.3 背景

随着人们生活信息化的提高,记事本只拘泥于笔和纸的时代已经一去不复返了,越来越多的电子版记事本进入了人们的生活。但如今的电脑端记事本软件感觉功能不够丰富,缺少一些个性化功能,导致用户体验不是很好,故本课程设计将开发一个加强版的电脑端记事本,来满足用户的需求。

二、系统可行性研究

2.1 系统概述

2.1.1 当前系统分析

当前电脑系统自带的记事本实现的功能有如下几种:文件、编辑、格式、查看、帮助,每个功能下又有多个子功能:

  • “文件”主菜单中有“新建”、“打开”、“保存”、“另存为”、“页面设置”、“打印”、“退出”这几个子功能

  • “编辑”主菜单中有“撤销”、“剪切”、“复制”、“粘贴”、“删除”、“查找”、“查找下一个”、“替换”、“转到”、“全选”、“日期/时间”这几个子功能

  • “格式”主菜单中有“自动换行”、“字体”这两个子功能

  • “查看”主菜单中有“状态栏”子功能

  • “帮助”主菜单中有“查看帮助”、“关于记事本”这两个子功能

2.1.2 目标系统分析

在实现系统自带笔记本的功能同时,再添加一些个性化功能,例如为记事本添加上行号(这大大提高了我们程序员看代码的方便性),在状态栏添加上当前时间以及字数统计,让用户能够对自己所写的字数一目了然,大大增强了用户体验。

此外,此记事本支持用户自定义背景颜色以及字体颜色,增强了趣味性,用户可以根据自己的喜好选择符合自己的主题。

即实现的功能有:

  • “文件”主菜单中有“新建”、“打开”、“保存”、“另存为”、“页面设置”、“打印”、“退出”这几个子功能

  • “编辑”主菜单中有“撤销”、“剪切”、“复制”、“粘贴”、“删除”、“查找”、“查找下一个”、“替换”、“转到”、“全选”、“日期/时间”这几个子功能

  • “格式”主菜单中有“自动换行”、“字体”、“背景颜色”、“字体颜色”这四个子功能

  • “查看”主菜单中有“状态栏”子功能

  • “帮助”主菜单中有“查看帮助”、“关于记事本”这两个子功能

2.2 可行性分析研究

2.2.1 技术可行性

由于计算机技术和互联网技术的发展突飞猛进,计算机的应用深入各行各业。涌现出各种编程语言。本电脑端记事本采用JAVA语言进行开发设计。JAVA语言是一门面向对象的语言,风格接近C、C++语言,但又舍弃了C和C++语言中易引起错误的指针、运算符重载、多重继承等特性,使开发的程序质量更高。由于开发记事本的难度不高,因此通过JAVA语言在Eclipse编译器上就可以实现开发了。

综上,技术可行性满足。

2.2.1.1 Java的基本信息及优势

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和静态的语言。

Java 平台是基于 Java 语言的平台。这样的平台非常流行。因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。

Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

2.2.1.2 Eclipse的基本信息

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。  

2.2.2 经济可行性

主要分为三方面进行分析,分别是开发的财力物力及时间。

  • 开发的财力物力:

    • 笔记本电脑X1
    • 其他成本几乎为零,因为该项目开发的难度不大,完成时即刻可以使用,也不需要另外研发硬件设施进行使用,用电脑就行
  • 开发的时间:

    • 从一开始的分析设计到最后的测试维护,时间约为一周就可以,时间成本不大,可行性高
  • 收益:

    • 由于开发这个程序可以更好地满足人们的日常需求,收益还算不错的

综上,经济可行性满足。

2.2.3 操作可行性

本程序采用的是图形化界面方式,记事本的操作不难,一般会使用电脑的人都会操作,只需按照图形界面进行操作,而且每个操作都有相关的快捷键提示,不需要相关的操作指导即可使用,可操作性非常强。

2.2.4 社会可行性

根据前期电脑上的记事本的使用情况及普及率来看,记事本的功能是受社会所认可的,人们普遍接受及使用电脑上的记事本,是可以为社会带来利益的。因此,对电脑端的记事本进行再开发完善,发掘它更多的功能并创造出社会价值,可行性是很高的。

三、需求分析

3.1 系统功能概述

3.2 系统功能描述

3.2.1 功能图

3.2.2 用例描述

用例名称 新建
涉及的参与者 用户
用例描述 在Windows 环境下,新建一个空白txt文档
前置条件 记事本系统可用
正常事件流 1.点击开始-所有程序-附件-记事本 2.在记事本系统界面,点击文件-新建
用例名称 打开
涉及的参与者 用户
用例描述 在Windows 环境下,新建一个空白txt文档
前置条件 记事本系统可用
正常事件流 1. 双击打开记事本 2. 左键单击记事本-点击打开
用例名称 保存或另存为
涉及的参与者 用户
用例描述 在Windows 环境下,新建一个空白txt文档
前置条件 记事本系统可用
正常事件流 1. 打开空白记事本,点击文件-保存-再次打开 2. 点击文件-另存为-保存
用例名称 编辑
涉及的参与者 用户
用例描述 在Windows 环境下,新建一个空白txt文档
前置条件 记事本系统可用
正常事件流 1. 在编辑区域输入“软件工程课程设计” 2. 在编辑区域输入“1504” 3. 选中内容“软件工程课程设计”,点击编辑-剪切 4. 点击编辑-撤销 5. 选中内容“软件工程课程设计”,点击编辑-复制 6. 点击编辑-粘贴 7. 选中内容“软件工程课程设计”,点击编辑-删除 8.点击编辑-查找,查找内容“软件工程课程设计” 9. 点击编辑-查找下一个
用例名称 字体
涉及的参与者 用户
用例描述 在Windows 环境下,新建一个空白txt文档
前置条件 记事本系统可用
正常事件流 1. 在记事本系统界面,点击格式-字体 2. 在编辑区域输入“软件工程课程设计”,字体改为Wingdings,点击确定 3. 选择字体-斜体 4. 选择字体-8

3.3 系统功能实现

3.3.1 时序图

3.3.2 类图(只选取部分函数)

3.4 系统角色

用户可以在系统里创建新文件,编辑文字,并保存,以便查看,还可以进行批处理文件等操作。

3.5 系统流程图

3.5.1 主流程图

如下图所示,打开记事本后,可在文本域进行文本输入;或者进行一系列执行操作包括:文件、编辑、格式以及帮助菜单。

  • 功能描述:打开文件、编辑、格式以及帮助菜单

  • 输入项:点相关按钮

  • 输出项:做出指定动作

3.5.2文件菜单操作流程图

文件菜单操作流程如下图,当打开文件菜单时,下拉显示子菜单包括新建、打开、保存、退出等功能。

  • 功能描述:实现文件新建、打开、保存、另存为、退出功能

  • 输入项:点相关按钮

  • 输出项:做出指定动作

3.5.3 编辑菜单操作流程图

编辑菜单操作流程如下图,当打开编辑菜单时,下拉显示子菜单包括复制、粘贴、剪切、全选、查找、替换等功能。

  • 功能描述:实现文本的剪切、复制、粘贴、撤销、查找、替换、删除功能

  • 输入项:点相关按钮

  • 输出项:做出指定动作

3.5.5帮助菜单操作流程图

帮助菜单操作流程如下图,当打开帮助菜单时,下拉显示子菜单关于记事本。

  • 功能描述:查看帮助信息

  • 输入项:点帮助按钮

  • 输出项:显示相关信息

3.6 数据流图

3.7 数据字典

由于无数据库设计,所以无数据字典描述。

四、概要设计

4.1 系统运行环境

4.1.1 操作系统

  • 操作系统无关性,Windows XP/7/8.1/10、Linux、Mac OS X下安装了Java的运行环境JRE即可运行

  • JDK版本:1.8

4.1.2 使用软件

  • 代码编写:Eclipse

  • 数据库:无

  • 建模工具:Rational Rose(自写)

  • 文档编写:Microsoft Word 2016

4.1.3 开发语言

  • Java

4.2 系统总体设计

4.2.1 基本设计概念和处理流程

4.2.1.1 全局E-R图

4.2.1.2 分E-R图

4.2.2 系统总体结构与模块

4.3 接口设计

4.3.1 外部接口

4.3.1.1 用户界面

4.3.1.2 软件接口

软件运行平台:Eclipse

4.3.1.3 硬件接口

硬件运行平台:PC端

4.3.2 内部接口

说明各个模块由谁调用,完成什么功能,完成后转入什么状态

模块 由谁调用 功能 完成后转入的状态
clock NotepadMainFrame 显示状态栏的时间
MQFontChooser NotepadMainFrame 字体选择器 字体变更
textLine NotepadMainFrame 左边的行号
状态栏 NotepadMainFrame 状态栏显示信息 显示状态栏
MainFrameWidowListener NotepadMainFrame 退出窗口选择设置 退出软件
actionPerformed NotepadMainFrame 记事本的状态操作 更换操作模式
exit,mySearch,paste等 NotepadMainFrame 退出,查找,暂停等操作 记事本状态改变

4.4 数据结构设计

由于没有用到数据库设计,所以无数据结构设计。

五、详细设计

5.1 数据流图

  • 源点/终点:用户

  • 处理:编辑(包括撤销、复制、剪贴、粘贴等)、新建记事本、保存、打开记事本、格式、打印

  • 数据流:输入的字符,记事本,打印文档

  • 数据存储:本地磁盘

此记事本的基本系统模型如下图

细化后的数据流图如下图

5.2 层次方框图

5.3 功能模块图

六、系统实现

6.1 关键代码

6.1.1 自动换行

JTextArea有自己定义的策略。

  1. //设置文本区的换行策略。如果设置为 true,则当行的长度大于所分配的宽度时,将换行。此属性默认为 false
  2. textArea.setLineWrap(true);

6.1.2背景颜色

  1. JColorChooser jcc1 = new JColorChooser();
  2. JOptionPane.showMessageDialog(this, jcc1,"选择背景颜色颜色",-1);
  3. color = jcc1.getColor();
  4. textArea.setBackground(color);

6.1.3 字体颜色

  1. jcc1=new JColorChooser();
  2. JOptionPane.showMessageDialog(this, jcc1, "选择字体颜色", -1);
  3. color = jcc1.getColor();
  4. //String string=textArea.getSelectedText();
  5. textArea.setForeground(color);

6.1.4鼠标右击菜单

  1. // 创建弹出菜单
  2. final JPopupMenu jp=new JPopupMenu();
  3. //创建弹出式菜单,下面三项是菜单项
  4. textArea.addMouseListener(new MouseAdapter() {
  5. @Override
  6. public void mouseClicked(MouseEvent e) {
  7. if(e.getButton()==MouseEvent.BUTTON3)//只响应鼠标右键单击事件
  8. {
  9. jp.show(e.getComponent(),e.getX(),e.getY());//在鼠标位置显示弹出式菜单
  10. }
  11. }
  12. });

6.1.5 打印功能

  1. public void Print()
  2. {
  3. try{
  4. p = getToolkit().getPrintJob(this,"ok",null);//创建一个Printfjob 对象 p
  5. g = p.getGraphics();//p 获取一个用于打印的 Graphics 的对象
  6. //g.translate(120,200);//改变组建的位置
  7. this.textArea.printAll(g);
  8. p.end();//释放对象 g
  9. }
  10. catch(Exception a){
  11. }
  12. }

6.1.6 显示时间

  1. //用到了线程,每1秒刷新一次时间
  2. public class Clock extends Thread{
  3. public void run() {
  4. while (true) {
  5. GregorianCalendar time = new GregorianCalendar();
  6. int hour = time.get(Calendar.HOUR_OF_DAY);
  7. int min = time.get(Calendar.MINUTE);
  8. int second = time.get(Calendar.SECOND);
  9. NotepadMainFrame.label1.setText(" 当前时间:" + hour + ":" + min + ":" + second);
  10. try {
  11. Thread.sleep(1000);
  12. } catch (InterruptedException exception) {
  13. }
  14. }
  15. }
  16. }

在NotepadMainFrame类中

  1. JToolBar toolState = new JToolBar();
  2. toolState.setSize(textArea.getSize().width, 10);//toolState.setLayout(new FlowLayout(FlowLayout.LEFT));
  3. toolState = new JToolBar();
  4. toolState.setSize(textArea.getSize().width, 10);//toolState.setLayout(new FlowLayout(FlowLayout.LEFT));
  5. label1 = new JLabel(" 当前系统时间:" + hour + ":" + min + ":" + second+" ");
  6. toolState.add(label1);
  7. Clock clock=new Clock();
  8. clock.start();

6.1.7 显示行数和列数

  1. label2 = new JLabel(" 第 " + linenum + " 行, 第 " + columnnum+" 列 ");
  2. toolState.add(label2);
  3. toolState.addSeparator();
  4. textArea.addCaretListener(new CaretListener() { //记录行数和列数
  5. public void caretUpdate(CaretEvent e) {
  6. JTextArea editArea = (JTextArea)e.getSource();
  7. try {
  8. int caretpos = editArea.getCaretPosition();
  9. linenum = editArea.getLineOfOffset(caretpos);
  10. columnnum = caretpos - textArea.getLineStartOffset(linenum);
  11. linenum += 1;
  12. label2.setText(" 第 " + linenum + " 行, 第 " + (columnnum+1)+" 列 ");
  13. }
  14. catch(Exception ex) { }
  15. }});
  16. contentPane.add(toolState, BorderLayout.SOUTH);
  17. toolState.setVisible(false);
  18. toolState.setFloatable(false);

6.1.8 撤销、返回

初始化一个UndoManger,然后通过body.getDocument().addUndoableEditListener(undoMgr)这个方法,就可以把撤销管理器的监听器添加到TextArea中。需要调用撤销的时候就调用unoMgr.undo()方法。

  1. UndoManager undoMgr=new UndoManager();
  2. JtextArea textArea.getDocument().addUndoableEditListener(undoMgr);
  3. if(undoMgr.canUndo()){
  4. undoMgr.undo();//撤销
  5. }
  6. if(undoMgr.canRedo()){
  7. undoMgr.redo();//恢复
  8. }

6.2 程序目录截图

七、系统测试

测试评价

针对实现的记事本的功能模块,基本上达到了预定的要求。

缺陷(未实现功能):

  • 右键的菜单响应功能中的从右到左,Unicode码,汉字重选

  • 保存的文件设置了颜色和字体,打开后还是默认大小

  • 打印功能还可以再完善,现在只能打印一页多点,具体的设置还不是很懂,等我再多学点

  • 将自动换行和状态显示默认添加

上传的附件 cloud_download 基于JAVA的记事本.zip ( 1.06mb, 303次下载 )
error_outline 下载需要9点积分

发送私信

优雅是一种气质,更是一种姿态,是一种最好的,最唯美的生命的姿态

5
文章数
12
评论数
最近文章
eject