一、题目简介
所选项目名称:编写一个记事本程序
项目需求描述:现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed,xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
(1).菜单中有“文件”,“编辑”,“关于”三个主菜单。
(2)“文件”有“新建”“打开”“保存”“退出”四个子菜单:分别用于新建文件,打开文件,保存文件,退出记事本。
(3)“编辑”中有“剪切”“复制”“粘贴”“颜色”三个字菜单:用于剪切文字,复制文字,粘贴文字。增加了“颜色”子菜单来对文字的颜色进行设置。
(4)“关于”菜单中有关于记事本程序的制作日期,作者等信息。
二、结对分工及过程
分工:互相讨论该程序的结构,由我进行代码的编写,代码完成后,谢丽丽进行代码的测试,并且将其改正,运行成功后进行截图保存。
过程:
整个记事本分为2块:菜单栏和内容输入区。本程序中首先定义一个mynotepad类继承JFrame作为最底层容器。
(1).Textcontent为程序文本输入区。
(2).Menu为菜单栏。
(3).AboutDialog为关于对话框。
(4).要想记事本完成需求分析中相应的功能,还必须添加事件监听器。事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。本程序中ActListener实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
另外,还用来WindowListener来监听处理容器关闭触发的事件,WindowListener继承了WindowsAdapter类并覆盖了WindowsClosing方法。
主函数Notepad类
(1)简要描述:
该类是整个程序的主框架,是javax.swing包中Jframe的一个子类。并实现了AddWindowListener、ActionListener接口。
(2)类详细设计:
该类的成员变量、构造方法及方法设计如下:
1) 成员变量
l color变量的值确定文本颜色。
2) 构造方法
l Notepad()是构造方法,负责完成初始化。
3)方法
l main()方法运行Notepad类。
(3)类详细代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;public class Notepad{
public static void main(String args[]){
MyNotepad noted=new MyNotepad();
noted.addWindowListener(new WindowAdapter(){
});
noted.setTitle("许金霞和谢丽丽的记事本程序");
noted.setSize(640,320);
noted.show();
noted.setLocation(150,100);
}
}
MyNotepad类
(1) 简要描述:
实现了记事本菜单的编辑操作
(2)类详细设计:
该类的成员变量、构造方法及方法设计如下:
1)成员变量
l color变量的值确定文本颜色。
2)构造方法
MyNotepad()是构造方法,负责完成初始化。
3)方法
l intTextcontent()方法是Notepad类格式化文本内容的方法。
l initMenu()方法是Notepad类定义菜单的方法。
l saveFile()方法是Notepad类定义保存文件的方法。
l unfold()方法是Notepad类定义读出文件的方法。
l initAboutDialog()方法是Notepad类定义关于对话框的方法。
(1)初始化组件
initTextContent();
initMenu();
initAboutDialog();
(2)构建菜单栏及其下拉菜单
JMenu[] menus=new JMenu[]{
new JMenu("文件"),
new JMenu("编辑"),
new JMenu("关于")
};
JMenuItem optionofmenu[][]=new JMenuItem[][]{{
new JMenuItem("新建"),
new JMenuItem("打开"),
new JMenuItem("保存"),
new JMenuItem("退出")
},
{
new JMenuItem("复制"),
new JMenuItem("剪切"),
new JMenuItem("粘贴"),
new JMenuItem("颜色")
},
{
new JMenuItem("关于")
}
};
(3)“文件”菜单的事件监听
ActionListener action=new ActionListener(){
public void actionPerformed(ActionEvent e){
String name = e.getActionCommand();
JMenuItem MI=(JMenuItem)e.getSource();
if("新建".equals(name)){
content.setText("");
file=null;
}else if("打开".equals(name)){
if(file !=null)openfile.setSelectedFile(file);
int returnVal=openfile.showOpenDialog(mynotepad.this);
if(returnVal==JFileChooser.APPROVE_OPTION){
file=openfile.getSelectedFile();
unfold();
}
}else if("保存".equals(name)){
if(file!=null) openfile.setSelectedFile(file);
int returnVal=openfile.showSaveDialog(mynotepad.this);
if(returnVal==JFileChooser.APPROVE_OPTION){
file=openfile.getSelectedFile();
saving();
}
}else if("退出".equals(name)){
mynotepad f=new mynotepad();
int s=JOptionPane.showConfirmDialog(f,"退出?","退出",JOptionPane.YES_NO_OPTION);
(4)“编辑”菜单的事件监听
else if("剪切".equals(name)){
content.cut();
}else if("复制".equals(name)){
content.copy();
}else if("粘贴".equals(name)){
content.paste();
}else if("颜色".equals(name)){
color=JColorChooser.showDialog(mynotepad.this,"",color);
content.setForeground(color);
(5)异常处理
在运行程序代码是有可能会产生异常情况或异常事件,为了避免这种情况,就需要在程序中用到Java异常处理机制。本程序中选用的异常处理机制是try,catch。捕获处理异常的第一步是用try选定要监控的异常范围,try后跟随catch代码块。
saving(){
try{
FileWriter Writef=new FileWriter(file);
Writef.write(content.getText());
Writef.close();
}catch(Exception e){e.printStackTrace();}
}
void unfold(){
try{
FileReader Readf=new FileReader(file);
int len=(int)file.length();
char []buffer=new char[len];
Readf.read(buffer,0,len);
Readf.close();
content.setText(new String(buffer));
}catch(Exception e){e.printStackTrace();}
}
三、源码的github链接
https://github.com/xujinxia/text/blob/master/jiedui
四.测试情况
五、心得体会
自己根据所学的知识基本上完成我的实验报告-编写一个记事本程序,也基本上实现了我在需求分析时所预期的功能。通过这次的实验,将我从书本上学习到的理论知识用到了实践上,从而进一步巩固和丰富了我所学过的知识,让我更深层次地认识到Java及其强大的功能。同时,做这次实验也进一步加强了我的动手能力。为了完成好这次实验报告,我提前做了较多的准备,一边上网查找相关资料,另一方面查阅相关书籍。在这过程中也无形中锻炼了我的思维分析、遇到问题及想方设法通过各种途径解决问题的能力。
附于结对实验同学的学习照片 结对同学 许金霞