JAVA记事本课程设计.docx
《JAVA记事本课程设计.docx》由会员分享,可在线阅读,更多相关《JAVA记事本课程设计.docx(37页珍藏版)》请在冰豆网上搜索。
JAVA记事本课程设计
课程设计
课程名称:
JAVA程序设计
题目:
简易记事本
年级/专业/班:
10计本一班
学生姓名:
学号:
指导老师:
开题时间:
2012年11月10日
完成时间:
2012年12月24日
摘要
随时着科学技术的快速发展,计算机程序设计早已成为了趋势,JAVA是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。
本课程设计就是主要利用java语言编写的一个模仿windows记事本的较简单的程序,它能实现打开文件,读取文件中的文本信息;显示、编辑修改文本信息;实现新建、打开、保存文本文件以及控制保存文本信息到指定的文件的一些基本功能。
本课程设计报告介绍了记事本系统,记事本的设计,在记事本的具体实现章节,给出了部分实现了的功能界面和相关的代码。
关键词:
JAVA,记事本,相关功能
ABSTRACT
Withtherapiddevelopmentofscienceandtechnology,computerprogramminghasalreadybecomeatrend.JAVAisacorecourseofcomputerprofessional,isthebaseofcomputerscience.JAVAarepractice-neededcurriculum.Thiscourseisdesignedtostrengthenpracticeabilityofapowerfulway,requiringJAVAapplicationsandthebasicmethodsofcomputerdebugging.ThiscourseisasimpleproceduresdesignedmainlyusingJavalanguageandtheimitationofWindowsnotepad.Itcanrealizethatopenfiles,readthetextfileinformation,display,editandmodifytextinformation,new,openandsavetextfilesandcontroltosavetextmessagestothespecifiedfileandsoon.Thisgivesatexteditorgreatconvenience,andatthesametimegreatlyimprovestheefficiency.
Thisreportintroducesnotebooksystemandnotepaddesign.Inthechapterofnotepadrealization,itgivespartofrealizedfunctioninterfaceandrelevantcode.
Keywords:
JAVA,notepad,Relevantfunction
一、绪论
在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。
文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。
第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。
它包含了一些非常短的命令(为了减少打字量)。
其中一个命令能够把文件的指定部分通过打字机打印出来。
编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。
随后,内容字符串又被扩展成正则表达式。
如果想看到文件的变化,你需要把它打印出来。
相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。
如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。
当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。
最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC6000系列机器的操作控制台而作的。
另外一个早期的全屏编辑器是vi。
vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。
全屏编辑器对视频终端的销售起到了促进的作用。
二、需求分析
1、功能需求
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
(1)菜单中有“文件”、“编辑”、“格式”、“帮助”四个个主菜单;
(2)“文件”有“新建”、“打开”、“保存”、“另存为”、“退出”五个字菜单,分别用于新建文件,打开文件,保存文件,另存文件,退出记事本。
(3)“编辑”中,有“撤销”、“复制”、“剪切”、“粘贴”、“删除”、“全选”六个个子菜单,分别用于撤销上一次操作,复制选中文字,剪切选中文字,粘贴选中文字,删除选中文字,选定整个文件内容。
(4)“格式”中有自动换行和字体两个子菜单,字体中包含了“字体”、“字形”、“大小”、“颜色”四个操作项。
字体项可以对文字的字体样式做修改,字体数量为Windows默认数值。
字形项可以对文字的形式进行修改,共有“常规”、“倾斜”、“粗体”、“粗体+倾斜”四个选项。
大小中包含了8-72磅大小范围内的字体大小数值选项。
颜色可以对字体进行颜色上的修改,是字体更加漂亮,颜色数量为Windows默认值。
自动换行能够实现文档在编辑是否需要的自动换行功能。
(5)“帮助”菜单中有“关于记事本”一个子菜单,用于描述记事本程序的相关信息和开发人员的个人信息。
2、函数需求
本次设计中,设计了一个菜单栏和文本内容区。
设计过程中用到了JScrollPane,JMenu,JTextPane,JFileChooser等。
JMenu用来制作菜单,JTextPane主要用来输入文本。
为了加入颜色的设置,所以加了一个JColorChooser组件。
整个记事本分为2块,菜单栏和内容输入区。
菜单栏设计如下:
类名:
EditWindow
(1)作用:
主类
(2)继承的父类:
JFrame类
(3)实现的接口:
windowListener类与actionListener类
(4)成员变量说明:
Filefile=null;//定义一个空文件
privateJLabelstateBar;//定义一个标签
privateJTextAreatext;//定义编辑区
privateJMenuBarmenubar;//定义菜单栏
privateJMenumenu1、menu2、menu3、menu4;//定义菜单
privateJMenuitem1-6,item2-6,item3-2,item4//定义菜单项
主要成员方法说明:
编辑区键盘事件:
KeyListener类如果记事本的编辑区内用键盘输入了字符,就能够被程序监听;
窗口的事件监听:
windowListener类,用来监听处理容器关闭触发的事件:
菜单项的事件监听:
ActionListener类,用来监听并处理所有菜单项和内容输入区为事件源的事件。
3、开发环境及运行环境分析
本记事本的开发环境是在windows7的环境下开发,运用了EditPul文本编辑器v3.30、JDK1.6开发工具,运行环境是DOS下运行的。
三、总体设计
1、系统流程设计
2、分模块设计
(1)“文件”菜单模块设计流程图
(2)“编辑”菜单模块设计流程图
(3)“格式”菜单模块设计流程图
(4)“帮助”菜单模块设计流程图
3、类设计
成员变量类型
成员变量名
成员变量描述
JMenuBar
menubar
菜单条
JTextArea
area
文本区
JScrollPane
pane
滚动条,当文本内容大于文本区时的时候显示。
JMenu
menu1、menu2、menu3、menu4
文件、编辑、字体、帮助
JMenuItem
item11,item12,item13,item14,item16
新建、打开、保存、另存为、退出
JMenuItem
item21,item22,item23,item24,item25,item26
撤销、复制、剪切、粘贴、删除、全选
JMenuItem
item31,item32
自动换行、字体
JMenuItem
item41
关于记事本
4、界面设计
(1)主界面
主界面主要是用于对选择相应的功能进行相应的功能,主界面主要包括文件,编辑,格式,帮助四个下拉菜单功能。
主要代码:
publicclassexamJSB
{
publicstaticvoidmain(String[]args)
{
EditWindowwin=newEditWindow("新建文本文档");
}
}
classEditWindowextendsJFrameimplementsActionListener
{
JMenuBarmenubar;
JMenumenu1;
JMenumenu2;
JMenumenu3;
JMenumenu4;
JTextAreaarea;
JFileChooserfileChooser;
privateStringvalue;
booleanisSaved=true;
EditWindow(Strings)
{
setTitle(s);
setSize(400,400);
setLocation(50,50);
setVisible(true);
fileChooser=newJFileChooser("c:
/");//打开文件
menubar=newJMenuBar();
menu1=newJMenu("文件");
menu2=newJMenu("编辑");
menu3=newJMenu("格式");
menu4=newJMenu("帮助");
//文字编辑区域
area=newJTextArea();
area.setFont(newFont("宋体",Font.PLAIN,16));/*设置当前字体*/
area.setLineWrap(true);/*设置文本区的换行策略*/
JScrollPanepane=newJScrollPane(area,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);/*垂直和水平滚动条-查看无法完全显示时,滚动条显示*/
ContainercontentPane=getContentPane();
contentPane.add(pane,BorderLayout.CENTER);
validate();
isSaved=false;//刚刚打开的窗口状态为未保存
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
(2)打开界面
主要代码:
elseif(e.getSource()==item12)//打开
{
area.setText(null);
intn=fileChooser.showOpenDialog(null);
if(n==JFileChooser.APPROVE_OPTION)
{
Filefile=fileChooser.getSelectedFile();
try{
FileReaderreadfile=newFileReader(file);
BufferedReaderin=newBufferedReader(readfile);
Strings=null;
while((s=in.readLine())!
=null)
area.append(s+"\n");
}
catch(IOExceptionee){}
}
}
(3)保存界面
主要代码:
privatevoidSave(){
//从标题栏取得文件名称
Filefile=newFile(getTitle());
//若指定的文件不存在
if(!
file.exists()){
//执行另存为
saveFileAs();
}
else{
try{
//开启指定的文件
BufferedWriterbuf=
newBufferedWriter(
newFileWriter(file));
//将文字编辑区的文字写入文件
buf.write(area.getText());
buf.close();
}
catch(IOExceptione){
JOptionPane.showMessageDialog(null,e.toString(),
"写入文件失败",JOptionPane.ERROR_MESSAGE);
}
}
}
(4)字体界面
主要代码:
//引用Fonts事件设计字体
classFontsextendsJDialog
{
privatestaticfinallongserialVersionUID=4042773383845024827L;
//字体格式
Stringstyle=null;
Stringbold=null;
Stringsize=null;
Fontfont=null;
String[]str_style=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
String[]str_bold={"常规","倾斜","粗体","粗体倾斜"};
String[]str_size={"8","9","10","11","12","14","16","18","20","22",
"24","26","28","36","48","72"};
//
publicJLabellabel1=newJLabel("字体(F):
");
publicJListfontStyle=newJList(str_style);
publicJScrollPaneStyleJScrollPane=newJScrollPane(fontStyle);
publicJLabellabel2=newJLabel("字形(Y):
");
publicJListfontBold=newJList(str_bold);
publicJScrollPaneBoldJScrollPane=newJScrollPane(fontBold);
publicJLabellabel3=newJLabel("大小(S):
");
publicJTextFieldsizeField=newJTextField("23");
publicJListfontSize=newJList(str_size);
publicJScrollPaneSizeJScrollPane=newJScrollPane(fontSize);
publicJLabelfontDisplay=newJLabel("AaBbYyZz");
publicJTextFieldtextField=newJTextField();
publicJButtonsureButton=newJButton("确定");
publicJButtoncancelButton=newJButton("取消");
publicJButtoncolorButton=newJButton("改变颜色");
publicColorcolor;
EditWindowmy=null;
publicFonts(EditWindowframe)
{
super(frame,"字体和颜色",true);
color=Color.black;
this.my=frame;
this.style="宋体";
this.bold="常规";
this.size="23";
label1.setBounds(10,5,50,30);
StyleJScrollPane.setBounds(10,40,160,150);
fontStyle.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente)
{
JListsource=(JList)e.getSource();
Fonts.this.style=source.getSelectedValue().toString();
Fonts.this.setFont();
}
});
label2.setBounds(190,5,50,30);
BoldJScrollPane.setBounds(190,40,90,150);
fontBold.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente)
{
JListsource=(JList)e.getSource();
Fonts.this.bold=source.getSelectedValue().toString();
Fonts.this.setFont();
}
});
label3.setBounds(300,5,60,30);
SizeJScrollPane.setBounds(300,60,60,130);
fontSize.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente)
{
JListsource=(JList)e.getSource();
sizeField.setText(source.getSelectedValue().toString());
Fonts.this.size=source.getSelectedValue().toString();
Fonts.this.setFont();
}
});
sizeField.setBounds(300,40,60,20);
fontDisplay.setBorder(BorderFactory.createTitledBorder("示例"));
fontDisplay.setBounds(20,220,200,100);
fontDisplay.setHorizontalAlignment(JLabel.CENTER);
sureButton.setBounds(280,260,80,30);
sureButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
my.area.setFont(font);
my.area.setForeground(color);
Fonts.this.dispose();
}
});
cancelButton.setBounds(280,300,80,30);
cancelButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
Fonts.this.dispose();
}
});
colorButton.setBounds(260,220,100,20);
this.add(colorButton);
colorButton.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
color=JColorChooser.showDialog(null,"改变字体颜色",Color.black);
}
});
this.add(label1);
this.add(label2);
this.add(label3);
this.add(sizeField);
this.add(BoldJScrollPane);
this.add(StyleJScrollPane);
this.add(SizeJScrollPane);
this.add(fontDisplay);
this.add(sureButton);
this.add(cancelButton);
this.setLayout(null);
this.setSize(400,380);
intx=(int)my.getLocation().x+100;
inty=(int)my.getLocation().y+100;
this.setLocation(x,y);
}
//由选项确定font字体
voidsetFont(){
intbold;
if(this.bold.equals("粗体"))
bold=Font.BOLD;
elseif(this.bold.equals("常规"))
bold=Font.PLAIN;
elseif(this.bold.equals("粗体倾斜"))
bold=Font.BOLD+Font.ITALIC;
elseif(this.bold.equals("倾斜"))
bold=Font.ITALIC;
else
bold=Font.PLAIN;
this.font=newFont(this.style,bold,Integer.parseInt(this.size));
//更改样本字体
//Sys