java记事本课程设计论文附源码解析.docx
《java记事本课程设计论文附源码解析.docx》由会员分享,可在线阅读,更多相关《java记事本课程设计论文附源码解析.docx(23页珍藏版)》请在冰豆网上搜索。
![java记事本课程设计论文附源码解析.docx](https://file1.bdocx.com/fileroot1/2023-1/25/a5d80dfd-75d9-4927-b30a-a5f29df53be6/a5d80dfd-75d9-4927-b30a-a5f29df53be61.gif)
java记事本课程设计论文附源码解析
信息科学与工程学院
Java课程设计
设计题目:
记事本课程设计
专业:
电子信息科学与技术
班级:
电子1202班
学号:
20121210606
姓名:
王鹏
2015年7月
XXX学院本科学生课程设计任务书
题 目
记事本
1、课程设计的目的
通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
模拟Windows的记事本程序,编写一个记事本。
要求具备基本的编辑、复制、粘贴、剪切、保存文件等功能,界面美观。
3、主要参考文献
[1]朱福喜.《Java语言程序设计》(第二版).科学出版社
[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社
[3]Deitel.《Java大学基础教程》(第六版).电子工业出版社
[4]MaryCampione.《Java语言导学》(第四版).机械工业出版社
[5]Y.DanielLiang.《Java语言程序设计基础篇》(第六版).机械工业出版社
[6]KathySierra.《HeadFirstJava》(第二版).东南大学出版社
4、课程设计工作进度计划
序号
时间(天)
内容安排
备注
1
1
分析设计准备
周一
2
2
编程调试阶段
周二至周三
3
1
编写课程设计报告
周四
4
1
考核
周五
总计
5(天)
指导教师(签字)
日期
年月日
教研室意见:
年月日
学生(签字):
接受任务时间:
年月日
摘要
目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到网络、多线程等重要的基础知识,因此Java语言也是学习面向对象编程和网络编程的首选语言。
此次课程设计主要通过编写一个简单的记事本程序使我们深入理解并实践在本课程中所学的有关JAVA程序设计方面的语言基础、异常处理、事件处理、小应用程序以及图形用户界面设计等内容。
此简易记事本程序,使用Java程序编写,能够进行输入文字操作,并具有新建文件,打开文件,保存文件,退出,复制,粘贴,剪切等功能。
该程序主要用到了Javaswing和事件监听等。
关键词记事本程序,java语言,Javaswing
摘要1
1需求分析3
1.1需求分析3
1.2功能设计3
2概要分析4
2.1概要设计思想4
2.2程序运行界面4
2.3程序模块说明5
2.4流程图6
2.5程序相关说明7
3程序详细设计与分析8
3.1构建菜单栏及其下拉菜单8
3.2“文件”菜单操作的事件监听8
3.3“编辑”、“格式”等菜单的事件监听10
3.4异常处理11
4测试分析12
5源程序清单15
结论22
参考文献23
1需求分析
1.1需求分析
现在网络上各种文档编辑器数不胜数,有EmEditor,UEStudio,GridinSoftNotepad,Notepad++,win32pad,SkimEdit,UniRed,xint。
功能也是应有尽有,有能改变字体的,有能改变文字颜色的。
但是,这些软件又存在各种各样的瑕疵或问题:
有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。
仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。
本程序设计就是依照这样一种使用需要设计了一个简单的记事本程序。
1.2功能设计
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
1、菜单中有“文件”,“编辑”,“格式”,“查看”,“帮助”五个主菜单。
2、“文件”有“新建”“打开”“保存”“另存为”“退出”五个子菜单:
分别用于新建文件,打开文件,保存文件,另存文件,退出记事本。
3、“编辑”中有“撤销”“剪切”“复制”“粘贴”“全选”“时间/日期”六个字菜单:
用于撤销操作,剪切文字,复制文字,粘贴文字。
全部选择,插入日期、时间。
4、“格式”菜单中有“自动换行”和“字体”两个子菜单。
5、“查看”菜单只是显示状态栏。
6、“帮助”菜单中只有“关于记事本”子菜单,主要用于显示该程序的名字,版本等信息。
2概要分析
2.1概要设计思想
在本程序中,设计了一个菜单栏和文本内容区。
设计过程中用到了JMenu,JMenuItem等。
JMenu用来制作菜单,菜单包括“文件”“编辑”“格式”“查看”“帮助”。
JMenuItem主要用来制作主菜单下面的子菜单。
2.2程序运行界面
图2.1记事本程序运行界面
2.3程序模块说明
图2.2类Notepad模块
图2.3程序详细模块
2.4流程图
图2.4程序流程图
2.5程序相关说明
整个记事本分为2快:
菜单栏和内容输入区。
本程序中首先定义一个Notepad类继承JFrame作为最底层容器。
(1)、text为程序文本输入区。
(2)、Menu为菜单栏。
(3)、要想记事本完成需求分析中相应的功能,还必须添加事件监听器。
事件监听器不仅要添加在菜单栏和内容输入区,还需加在容器中。
本程序中Listen和Listen1实现了ActionListener接口,用来监听并处理所有菜单项和内容输入区为事件源的事件。
3程序详细设计与分析
3.1构建菜单栏及其下拉菜单
JMenufiles=newJMenu("文件(F)");
JMenuedit=newJMenu("编辑(E)");
JMenuformats=newJMenu("格式(O)");
JMenuscan=newJMenu("查看(V)");
JMenuhelp=newJMenu("帮助(H)");
JMenuItemnewFile=newJMenuItem("新建(N)");
JMenuItemopen=newJMenuItem("打开(O)...");
JMenuItemsave=newJMenuItem("保存(S)");
JMenuItemsaveAs=newJMenuItem("另存为(A)...");
JMenuItemexit=newJMenuItem("退出(X)");
JMenuItemundo=newJMenuItem("撤销(U)");
JMenuItemcut=newJMenuItem("剪切(T)");
JMenuItemcopy=newJMenuItem("复制(C)");
JMenuItempaste=newJMenuItem("粘贴(P)");
JMenuItemselectAll=newJMenuItem("全选(A)");
JMenuItemtimeDate=newJMenuItem("时间/日期(D)");
JCheckBoxMenuItemlineWrap=newJCheckBoxMenuItem("自动换行(M)");
JMenuItemfonts=newJMenuItem("字体...");
JMenuItemstatus=newJMenuItem("状态栏");
JMenuItemabout=newJMenuItem("关于记事本(A)");
3.2“文件”菜单操作的事件监听
classListen1implementsActionListener
{
//实现用于对文件进行操作的事件侦听器
publicvoidactionPerformed(ActionEvente)
{
Objectsource=e.getSource();
//打开文件事件
if(source==open)
{
FileDialogopenFile=newFileDialog(th,"打开文件...",FileDialog.LOAD);
openFile.setVisible(true);
StringfilePath=openFile.getDirectory()+openFile.getFile();
try
{
FileInputStreamfis=newFileInputStream(filePath);
byte[]content=newbyte[fis.available()];
fis.read(content);
text.setText(newString(content));
text.setCaretPosition(0);
if(openFile.getFile()!
=null)
{
th.setTitle(openFile.getFile()+name);
openedPath=filePath;
opened=true;
}
fis.close();
}
catch(Exceptionex)
{
ex.printStackTrace();
}
opened=true;
}
//保存及另存为事件
elseif(source==save||source==saveAs)
{
StringsavePath=openedPath;
if(savePath==null||source==saveAs)
{
FileDialogsaveFile=newFileDialog(th,"保存文件...",FileDialog.SAVE);
saveFile.setVisible(true);
savePath=saveFile.getDirectory()+saveFile.getFile();
}
try
{
FileOutputStreamfos=newFileOutputStream(savePath);
fos.write(text.getText().getBytes());
fos.close();
}
catch(Exceptionex)
{
ex.printStackTrace();
}
if(source==save)
openedPath=savePath;
}
}
}
3.3“编辑”、“格式”等菜单的事件监听
classListenimplementsActionListener
{
//实现用于一般操作的事件侦听器
publicvoidactionPerformed(ActionEvente)
{
Objectsource=e.getSource();
if(source==newFile)
{
text.setText("");
th.setTitle(name);
openedPath=null;
opened=false;
}
elseif(source==exit)
System.exit(0);
elseif(source==selectAll)
text.selectAll();
elseif(source==cut)
text.cut();
elseif(source==copy)
text.copy();
elseif(source==paste)
text.paste();
elseif(source==lineWrap)
text.setLineWrap(!
text.getLineWrap());
elseif(source==about)
{
Stringmessage="java记事本\n版本0.01\n版权所有2013pzhjsj\n\n本产品符合最终用户许可协议,授权给:
\npzhjsj\n";
JOptionPane.showMessageDialog(th,message,"关于记事本",JOptionPane.PLAIN_MESSAGE);
}
elseif(source==timeDate)
{
DatenowTime=newDate();
SimpleDateFormattimes=newSimpleDateFormat("HH:
mmyyyy-MM-dd");
text.insert(times.format(nowTime),text.getCaretPosition());
}
}
}
3.4异常处理
在运行程序代码是有可能会产生异常情况或异常事件,为了避免这种情况,就需要在程序中用到Java异常处理机制。
本程序中选用的异常处理机制是try,catch。
捕获处理异常的第一步是用try选定要监控的异常范围,try后跟随catch代码块。
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exceptione){
System.err.println("Couldn'tusethesystemlookandfeel:
"+e);
}
4测试分析
图4.1“文件”菜单
图4.2点击“另存为”运行情况
图4.3“编辑”菜单
图4.4插入“时间/日期”
图4.5“查看”菜单
图4.6“帮助”菜单
5源程序清单
/*******************************************
*
*文本编辑器(模拟实现Windows记事本程序)
*Notepad.java
*模拟Windows的记事本程序,编写一个记事本。
*要求具备基本的编辑、复制、粘贴、剪切、保存文件等功能,界面美观。
*
********************************************/
importjava.io.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.Date;
importjava.text.SimpleDateFormat;
publicclassNotepadextendsJFrame
{
JMenuBarmenub=newJMenuBar();
JTextAreatext=newJTextArea();
JMenufiles=newJMenu("文件(F)");
JMenuedit=newJMenu("编辑(E)");
JMenuformats=newJMenu("格式(O)");
JMenuscan=newJMenu("查看(V)");
JMenuhelp=newJMenu("帮助(H)");
JMenuItemnewFile=newJMenuItem("新建(N)");
JMenuItemopen=newJMenuItem("打开(O)...");
JMenuItemsave=newJMenuItem("保存(S)");
JMenuItemsaveAs=newJMenuItem("另存为(A)...");
JMenuItemexit=newJMenuItem("退出(X)");
JMenuItemundo=newJMenuItem("撤销(U)");
JMenuItemcut=newJMenuItem("剪切(T)");
JMenuItemcopy=newJMenuItem("复制(C)");
JMenuItempaste=newJMenuItem("粘贴(P)");
JMenuItemselectAll=newJMenuItem("全选(A)");
JMenuItemtimeDate=newJMenuItem("时间/日期(D)");
JCheckBoxMenuItemlineWrap=newJCheckBoxMenuItem("自动换行(M)");
JMenuItemfonts=newJMenuItem("字体...");
JMenuItemstatus=newJMenuItem("状态栏");
JMenuItemabout=newJMenuItem("关于记事本(A)");
JFrameth=this;
Stringname;
StringopenedPath=null;
booleanopened=false;
booleanreworked=false;
//初始化窗体
Notepad(Stringname)
{
super(name);
this.name=name;
intx,y;
Dimensionsize=Toolkit.getDefaultToolkit().getScreenSize();
x=(size.width-600)/2;
y=(size.height-400)/2;
setSize(600,400);
setLocation(x,y);
//让程序界面显示在屏幕中央
setMinimumSize(newDimension(250,150));
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
//初始化布局
voidinit()
{
files.setMnemonic('F');
edit.setMnemonic('E');
formats.setMnemonic('O');
scan.setMnemonic('V');
help.setMnemonic('H');
newFile.setMnemonic('N');
open.setMnemonic('O');
save.setMnemonic('S');
saveAs.setMnemonic('A');
exit.setMnemonic('X');
undo.setMnemonic('U');
cut.setMnemonic('T');
copy.setMnemonic('C');
paste.setMnemonic('P');
selectAll.setMnemonic('A');
timeDate.setMnemonic('D');
lineWrap.setMnemonic('M');
about.setMnemonic('A');
//为控件添加助记符
newFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
open.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
save.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK));
copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
selectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK));
timeDate.setAccelerator(KeyStroke.getKeyStroke("F5"));
//为控件添加快捷键
files.add(newFile);
files.add(open);
files.add(save);
files.add(saveAs);
files.addSeparator();
files.add(exit);
edit.add(undo);
edit.addSeparator();
edit.add(cut);
edit.add(copy);
edit.add(paste);
edit.addSeparator();
edit.add(selectAll);
edit.add(timeDate);
formats.add(lineWrap);
formats.add(fonts);
scan.add(status);
help.add(about);
menub.add(files);
menub.add(edit);
menub.add(formats);
menub.add(scan);
menub.add(help);
setJMenuBar(menub);
getContentPane().add(newJScrollPane(text));
Listenlisten=newListen();
Listen1listen1=newListen1();
newFile.addActionListener(listen);
open.addActionListener(listen);
save.addActionListener(listen);
saveAs.addA