java记事本课程设计报告.docx
《java记事本课程设计报告.docx》由会员分享,可在线阅读,更多相关《java记事本课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
java记事本课程设计报告
课程设计报告
(本科)
课程:
面向对象程序设计
学号:
11104211221110421086
姓名:
潘雨胜邵阳
班级:
网络工程2班
教师:
钱田芬
时间:
2013.11.20-2013.12.20
计算机科学与技术系
设计名称:
编写一个记事本程序
设计内容、目的与要求:
1实验内容
1.1编写一个简单记事本程序;
1.2能实现编辑、保存、另存为、查找替换等功能
2实验要求
2.1用图形用户界面实现;
2.2用文件输入输出流编译。
2.3实现文件和编辑菜单里的功能;
3实验目的
3.1能够实现基本的文件录入即新建事件的功能;
3.2能够实现事件的保存和另存功能以及事件的删除;
3.3能够实现事件的查找和替换功能,保证程序的可修改性;
3.4能够实现事件内容的复制,粘贴和拷贝功能;
3.5最后是关于对改程序的帮助即改程序的介绍。
计划与进度安排:
2013.11.20--2013.11.30
对题目有基本的思路怎样去编译程序,查阅资料,惊醒初步的准备工作;
2013.12.01--2013.12.10
编译程序并上机调试运行,看是否能正确运行,并将有用的实验结果截图保存,编写文档,将程序每部步实现的功能,用电子文档的形式表达出来,并且用图文并茂的方式表现出自己的每一步设计思路;
2013.12.10--2013.12.20
将编译好的源程序和电子文档仔细查看,再次运行检查是否有误,然后再将电子文档打印成册,将程序以及电子文档让验收老师验收,如果有误还需再次修改。
设计过程、步骤(可加页):
4需求分析
4.1系统概述;
该报告中的程序是使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切等功能,不同之处是本程序能够对文字的颜色进行设置。
该程序主要用到了Javaswing和事件监听等。
4.2功能需求描述;
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
(1).菜单中有“文件”,“编辑”,“关于”三个主菜单。
(2)“文件”有“新建”“打开”“保存”“另存为”“退出”五个子菜单:
分别用于新建文件,打开文件,保存文件,另外保存文件,退出记事本。
(3)“编辑”中有“剪切”“复制”“粘贴”“全选”“查找”“替换”六个字菜单:
用于剪切文字,复制文字,粘贴文字,全部选中。
增加了“查找”“替换”子菜单来对文字进行查找和替换。
(4)“关于”菜单中有关于记事本程序的制作日期,作者等信息。
4.3总体设计
开发与设计的总体思想:
在本程序中,设计了一个菜单栏和文本内容区。
设计过程中用到了JScrollPane,JMenu,JTextPane,JFileChooser等。
JMenu用来制作菜单,菜单包括“文件”“编辑”“关于”。
JTextArea主要用来输入文本。
系统模块结构图
模块设计
系统模块流程图
5详细设计
5.1主界面模块
首先创建一个名为Notebook的类并继承Frame类实现监听接口作为最底层的容器(具体过程在“4.3.2自定义类及接口说明”作说明)。
菜单栏中有“文件”、“编辑”、“帮助”三项菜单,分别添加的相应的项,各实现其功能。
5.1.1主界面主要代码
publicNotebook()
{
this.setTitle("记事本");
contianer=this.getContentPane();
contianer.setLayout(newBorderLayout());
jta=newJTextArea();
contianer.add(jta);
JMenuBarmb=newJMenuBar();
buildMainMenu(mb);
this.setJMenuBar(mb);
this.setVisible(true);
this.setSize(650,450);
}
5.2文件界面
5.2.1文件界面包括新建(new)、打开(open)、保存(save)和另存(saves)为退出(exit)等功能,通过给各功能初始化容器、初始化组件、设置事件监听器,下面有其实现方法:
voidbuildMainMenu(JMenuBarmb){
JMenufileMenu=newJMenu("文件(F)");
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItemnewMenuItem=newJMenuItem("新建");
fileMenu.add(newMenuItem);
JMenuItemopenMenuItem=newJMenuItem("打开");
openMenuItem.setMnemonic(KeyEvent.VK_O);
openMenuItem.addActionListener(newOpenActionListener());
fileMenu.add(openMenuItem);
JMenuItemsaveMenuItem=newJMenuItem("保存");
saveMenuItem.setMnemonic(KeyEvent.VK_S);
saveMenuItem.addActionListener(newSaveActionListener());
fileMenu.add(saveMenuItem);
JMenuItemsaveasMenuItem=newJMenuItem("另存为");
saveasMenuItem.setMnemonic(KeyEvent.VK_A);
saveasMenuItem.addActionListener(newSaveActionListener());
fileMenu.add(saveasMenuItem);
JMenuItemexitMenuItem=newJMenuItem("退出");
exitMenuItem.setMnemonic(KeyEvent.VK_E);
5.2.2各部分截图;
打开界面截图;
保存部分截图;
退出部分截图
5.2.3各部分实现的功能框图
保存
)
新建
5.3编辑界面
5.3.1主要有剪切、复制、粘贴、查找和替换功能,通过cut,copy,paste,serach和ache实现各功能,然后对每个功能初始化容器、初始化组件、设置事件监听器保证功能的实现,下面是实现各功能的主要代码:
exitMenuItem.addActionListener(newExitActionListener());
fileMenu.add(exitMenuItem);
mb.add(fileMenu);
JMenueditMenu=newJMenu("编辑(E)");
editMenu.setMnemonic(KeyEvent.VK_E);
JMenuItemcutMenuItem=newJMenuItem("剪切");
cutMenuItem.setMnemonic(KeyEvent.VK_T);
cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
cutMenuItem.addActionListener(newCutActionListener());
editMenu.add(cutMenuItem);
JMenuItemcopyMenuItem=newJMenuItem("复制");
copyMenuItem.setMnemonic(KeyEvent.VK_C);
copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
copyMenuItem.addActionListener(newCopyActionListener());
editMenu.add(copyMenuItem);
JMenuItempasteMenuItem=newJMenuItem("粘贴");
pasteMenuItem.setMnemonic(KeyEvent.VK_P);
pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
pasteMenuItem.addActionListener(newPasteActionListener());
editMenu.add(pasteMenuItem);
JMenuItemsallMenuItem=newJMenuItem("全选");
sallMenuItem.setMnemonic(KeyEvent.VK_A);
sallMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));
sallMenuItem.addActionListener(newSallActionListener());
editMenu.add(sallMenuItem);
JMenuItemsearchMenuItem=newJMenuItem("查找");
searchMenuItem.setMnemonic(KeyEvent.VK_S);
searchMenuItem.addActionListener(newSearchActionListener());
editMenu.add(searchMenuItem);
JMenuItemchanMenuItem=newJMenuItem("替换");
chanMenuItem.setMnemonic(KeyEvent.VK_G);
chanMenuItem.addActionListener(newChanActionListener());
editMenu.add(chanMenuItem);
mb.add(editMenu);
5.3.2截图;
剪切
查找替换
5.3.3各功能的实现框图;
5.3.3.1剪切
5.3.3.2粘贴
5.3.3.3删除
5.4帮助界面
5.4.1帮助界面主要是对该程序的介绍,以及设计人员的介绍,通过about方法来实现的,下面是主要的代码:
JMenuhelpMenu=newJMenu("帮助(H)");
helpMenu.setMnemonic(KeyEvent.VK_H);
JMenuItemabouthMenuItem=newJMenuItem("关于记事本");
abouthMenuItem.setMnemonic(KeyEvent.VK_A);
abouthMenuItem.addActionListener(newAbouthActionListener());
helpMenu.add(abouthMenuItem);
mb.add(helpMenu);
}
5.4.2帮助部分截图:
6、原代码
importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importjavax.swing.*;
publicclassNotebookextendsJFrame{
Containercontianer;
JFileChooserfc=newJFileChooser();
Filefile=null;
JTextAreajta;
privateMyFindDialogfd=newMyFindDialog(this,jta);
publicNotebook()
{
this.setTitle("记事本");
contianer=this.getContentPane();
contianer.setLayout(newBorderLayout());
jta=newJTextArea();
contianer.add(jta);
JMenuBarmb=newJMenuBar();
buildMainMenu(mb);
this.setJMenuBar(mb);
this.setVisible(true);
this.setSize(650,450);
}
voidbuildMainMenu(JMenuBarmb){
JMenufileMenu=newJMenu("文件(F)");
fileMenu.setMnemonic(KeyEvent.VK_F);
JMenuItemnewMenuItem=newJMenuItem("新建");
fileMenu.add(newMenuItem);
JMenuItemopenMenuItem=newJMenuItem("打开");
openMenuItem.setMnemonic(KeyEvent.VK_O);
openMenuItem.addActionListener(newOpenActionListener());
fileMenu.add(openMenuItem);
JMenuItemsaveMenuItem=newJMenuItem("保存");
saveMenuItem.setMnemonic(KeyEvent.VK_S);
saveMenuItem.addActionListener(newSaveActionListener());
fileMenu.add(saveMenuItem);
JMenuItemsaveasMenuItem=newJMenuItem("另存为");
saveasMenuItem.setMnemonic(KeyEvent.VK_A);
saveasMenuItem.addActionListener(newSaveActionListener());
fileMenu.add(saveasMenuItem);
JMenuItemexitMenuItem=newJMenuItem("退出");
exitMenuItem.setMnemonic(KeyEvent.VK_E);
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));
exitMenuItem.addActionListener(newExitActionListener());
fileMenu.add(exitMenuItem);
mb.add(fileMenu);
JMenueditMenu=newJMenu("编辑(E)");
editMenu.setMnemonic(KeyEvent.VK_E);
JMenuItemcutMenuItem=newJMenuItem("剪切");
cutMenuItem.setMnemonic(KeyEvent.VK_T);
cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK));
cutMenuItem.addActionListener(newCutActionListener());
editMenu.add(cutMenuItem);
JMenuItemcopyMenuItem=newJMenuItem("复制");
copyMenuItem.setMnemonic(KeyEvent.VK_C);
copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK));
copyMenuItem.addActionListener(newCopyActionListener());
editMenu.add(copyMenuItem);
JMenuItempasteMenuItem=newJMenuItem("粘贴");
pasteMenuItem.setMnemonic(KeyEvent.VK_P);
pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK));
pasteMenuItem.addActionListener(newPasteActionListener());
editMenu.add(pasteMenuItem);
JMenuItemsallMenuItem=newJMenuItem("全选");
sallMenuItem.setMnemonic(KeyEvent.VK_A);
sallMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK));
sallMenuItem.addActionListener(newSallActionListener());
editMenu.add(sallMenuItem);
JMenuItemsearchMenuItem=newJMenuItem("查找");
searchMenuItem.setMnemonic(KeyEvent.VK_S);
searchMenuItem.addActionListener(newSearchActionListener());
editMenu.add(searchMenuItem);
JMenuItemchanMenuItem=newJMenuItem("替换");
chanMenuItem.setMnemonic(KeyEvent.VK_G);
chanMenuItem.addActionListener(newChanActionListener());
editMenu.add(chanMenuItem);
mb.add(editMenu);
JMenuhelpMenu=newJMenu("帮助(H)");
helpMenu.setMnemonic(KeyEvent.VK_H);
JMenuItemabouthMenuItem=newJMenuItem("关于记事本");
abouthMenuItem.setMnemonic(KeyEvent.VK_A);
abouthMenuItem.addActionListener(newAbouthActionListener());
helpMenu.add(abouthMenuItem);
mb.add(helpMenu);
}
classMyFindDialogextendsJDialogimplementsActionListener{
privateLabell1=newLabel("查找字符串");
privateLabell2=newLabel("替换字符串");
privateTextFieldtf1=newTextField(10);
privateTextFieldtf2=newTextField(10);
privateButtonb1=newButton("向下查找");
privateButtonb2=newButton("替换");
publicMyFindDialog(Frameowner,JTextAreajta){
super(owner,"查找",false);
setLayout(null);
l1.setBounds(10,30,80,20);
l2.setBounds(10,70,80,20);
tf1.setBounds(90,30,90,20);
tf2.setBounds(90,70,80,20);
b1.setBounds(190,30,80,20);
b2.setBounds(190,70,80,20);
add(l1);
add(l2);
add(tf1);
add(tf2);
add(b1);
add(b2);
setResizable(false);
b1.addActionListener(this);
b2.addActionListener(this);
}
publicvoidshowFind(){
setTitle("查找");
setSize(280,300);
setVisible(true);
}
publicvoidshowReplace(){
setTitle("查找替换");
setSize(280,300);
setVisible(true);
}
privatevoidfind(){
Stringcontent=jta.getText();
Stringstr=tf1.getText();
intpp=jta.getCaretPosition();
intend=content.length();
Stringtext=content.substring