《Java课程设计--简单的记事本程序.docx》由会员分享,可在线阅读,更多相关《Java课程设计--简单的记事本程序.docx(19页珍藏版)》请在课桌文档上搜索。
1、第1章课题概述11.1 课题的目的11.2 课题的要求11.2.1界面要求:1L2.2程序功能要求:11.3设备与环境1第2章概要设计22.1 整个程序的模块结构22.2 各个功能的描述22.2.1新建功能22.2.2打开功能22.2.3保存功能22.2.4另存为功能22.2.5查找功能32. 2.6替换功能3第3章程序功能的实现43.1主窗口的实现43. 2各个功能的实现43. 2.1新建的实现43. 2.2打开的实现53. 2.3保存的实现63. 2.4另存为的实现74. 2.5查找的实现83.2.6替换的实现10第4章调试及发现问题的解决H第5章程序测试及分析12第6章总结15参考文献1
2、6第1章课题概述仿照Window系统中的“记事本”利用JaVa的GUI和文件输入输出流实现一个简单的记事本程序。要求能实现编辑、保存、另存为、查找和替换等功能。1.1课题的目的记事本是当代计算机操作系统当中功能最强大的工具之一,用户不仅可以用它记录生活和工作上的事,还可以用它来编写程序。如今我想运用自己学的java知识来编写一个记事本程序,同时可以利用Java的跨平台性,以达到多个平台兼容运行的目的。1.2课题的要求1.2.1界面要求:(1)程序运行时,上方应显示记事本三个字,程序中还需显示文件和编辑两个菜单供用户选择。程序窗口可以自由地被用户拉伸,大小也可以改变。(2)用户可以看到自己在文本
3、框内随意编辑的文字内容。(3)用户在点击文件和编辑两个菜单时可以看到二级菜单选项。文件菜单中可看到新建、打开、保存、另存为,编辑菜单中可看到查找、替换。1.2.2程序功能要求:(1)用户可以通过点击新建来开启一个新的输入文本区,并能提醒用户保存上一个编辑的文本。(2)用户在本程序编辑的文本可以做到与Windows中的记事本在换行方面相兼容。(3)可以查找出文本内用户规定的查找对象,并进行替换。1. 3设备与环境硬件:多媒体计算机。软件:java集成开发环境、操作系统。第2草概要设计2.1整个程序的模块结构运行程序首先可以看到文件和和编辑两个菜单选项。点击文件可以看到新建、打开、保存和另存为这四
4、个选项。而点击编辑则会看到查找和替换两个选项。整个程序的模块图2-1所示。记事本文件编辑图2-1整个程序的模块2. 2各个功能的描述2. 2.1新建功能用户可以编辑完一个文本后,建一个新的文本,还能提醒用户保存前一个编辑过的文本,一定程度上可以减少用户误删文档的几率。2. 2.2打开功能打开功能可以让用户在电脑中找到并打开之前编辑过的文本,会弹出文件对话框,用户选择路径找到目标文件,可进行后续编辑操作。2. 2.3保存功能需要判断用户是否是首次保存文本。如果是首次编辑,保存时需选择存储路径。如果是打开并修改已编辑过的文本,此时保存,则会和打开的路径一致,不会有任何对话框弹出。2. 2.4另存为
5、功能另存为功能是让用户选择新的存储路径,与第一次保存相同,只要触发这个功能,保存时都会弹出文件对话框,要求用户需选择存储路径。2. 2.5查找功能查找功能是本课程设计的难点,能找出在查找区域内规定的内容。参照WindoWS下的记事本,需要增加查找方向,区分大小写。进行一次具体的查找流程请见图220图2-2进行一次查找的具体流程3. 2.6替换功能替换功能是基于查找功能,此外还多增加的一个能够替换原文本编辑区域中选定内容的功能。可以帮助用户方便地更换内容。第3章程序功能的实现3.1 主窗口的实现在程序中调用JFrame、JMenuJMenUItem等给程序添加窗口、菜单、菜单选项和实现某些功能需
6、弹出的对话框。实现主窗口的代码如下:finalJFramejf=newJFrame(记事本”);JMenuBarjmb=newJMenUBar();3Menujml=newJMenU(文殍”);3Menujm2=newJMenl(“编獐”);jta=newJTeXtArea();DMenuItemjitll=newJMenuItemjitl2=newJMenuItemjitl3=newJMenuItemjitl4=newJMenuItemjit21=newJMenuItemjit22=newJMenIlltem(扬遂”);JMenuItemC,;JMenuItem(;JMenUItem(另存为
7、);JMenuItem(,t,);JMenUIten(替换);功能代码省略。jml.add(jitll);jml.add(jitl2);jml.add(jitl3);jml.add(jitl4);jm2.add(jit21);jm2.add(jit22);jmb.add(jml);jmb.add(jm2);jf.add(jt);jf.setJMenuBar(jmb);jf.setSize(500j500);jf.SetVisible(true);jf.setDefaultCloseOperation(JFrame.EXITJ)N_CLOSE);关闭窗口。)3.2 各个功能的实现4. 2.1新建
8、的实现实现简单新建功能只要将文本框内容设置为空即可,但是要判断上一个文本是否改动?如果改动,需提示用户保存,并套用第一次保存的方法。新建的代码实现如下:jitll.addActionListener(newActionListener()publicvoidactionPerformed(ActionEvente)Stringstr2=Jt0.getTet();if(strl.equals(str2)文本是否改变?jt.setTet(22)5else提醒用户保存匕个文本。JFramejf2=newJFrame();FileDialogfd=newFileDialog(jf24”请选择保存路径”
9、,FileDialog.S4UF);fd.SetVisible(true);StringfilePath=fd.getDirectory();StringfileName=fd.getFile();fiLepath=filePath+fileName;try此处省略,方法与保存功能相同,只需将写入对象由Strl改为Str2即可。catch(FileNotFoundExceptionel)el.printStackTrace();catch(IOExceptionel)el.printStackTrace();3jt.setTet(2););3.2.2打开的实现实现打开功能,首先需要弹出文件对话
10、框,并且设置为可见,让用户选择.txt文件。先定义一个字节流b,将已经读写进来文本的字节流通过循环传给b,将读出来的东西返回给int型的temp。当读取结束,将所有数组的值以字符串的形式传给给str,并显示。打开的代码实现如下:jitl2.addActIonListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)JFramejfl=newJFrame();FileDialogfd=newFileDialog(jflj”打开FileDialog.LOAD);打开框。fd.SetVisible(true);Stringfi
11、lefPath=fd.getDirectory();StringfileName=fd.getFile();fiLepath=filefPath+fileName;获取绝对路径。tryFileInputStreamfis=newFileInputStream(yitepth);byteb=newbyte1024;定义字节流Stringstr=:;while(true)inttemp=fis.read(b);if(temp=-1)文件已读完break;/跳出循环)str+=newString(b,0,temp);将字节存储的内容以字符串形式传给Str。)strl=str;jt.setText(s
12、tr); catch(FileNotFoundExceptionel)el,printStackTrace(); catch(IOExceptionel)el.printStackTrace(););3.2.3保存的实现实现保存功能,需要考虑考虑两种情况:用ifelse语句判断用户是否是第一次编辑,如果用户是第一次编辑文本时,需要弹出文件对话框,让用户选择保存路径。如果是先打开曾经编辑过的文档,则路径是和打开的路径一致。保存时先建立一个缓存区,将文档转成字符数组的形式后,查找换行符,一旦查找到换行符,便记录到下一行,以便兼容WindOWS的原生记事本,最后写入电脑。保存的代码实现如下:jitl
13、3.addActIonListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)Stringstrl=jt.getText();if(fiLepath=null)判断路径是否为空。JFramejf2=newJFrame();FileDialogfd=newFileDialog(jf2,保存”,FileDialog.SIE);弹出保存对话框。fd,setVisible(true);StringfilePath=fd.getDirectory();StringfileName=fd.getFile();fiLepath=fi
14、lePath+fileName;获取绝对路径。)tryFileWriterfw=newFileWriter(itepth+,.txt);BufferedWriterbw=newBufferedWriter(fw);charch=strl.toCharArray();for(inti=0;i=ch.length-1;i+)if(chi=n)如果遇见换行符则开启新的一行。bw.newLine();continue;)bw.write(chi);写入电脑。)bw.flush();bw.close(); catch(FileNotFoundExceptionel)el.printStackTrace(
15、); catch(IOExceptionel)el.printStackTrace(););3.2.4另存为的实现实现另存为功能,和保存功能类似,但不需要考虑用户是否是第一次编辑,一直让用户选择保存路径。保存时先建立一个缓存区,将文档以字符数组的形式,查找其中的换行符,一旦查找到换行符,便记录到下一行,以便兼容Windows的原生记事本。然后写入电脑。另存为的主要代码实现如下:jitl4.addActionListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)Stringstrl=jt.getTet();JFrame
16、jf2=newJFrame();不需要判断绝对路径是否存在。FileDialogfd=newFileDialog(jf2,“另存为:FileDialog.SUE);fd.SetVisible(true);StringfilePath=fd.getDirectory。;StringfileName=fd.getFile();try内容与保存一样catch(FileNotFoundExceptionel)el.printStackTrace();catch(IOExceptionel)el.printStackTrace(););3.2.5查找的实现实现查找功能,需弹出以WindoWS记事本为原型
17、,布局好的查找对话框。在对话框中设置查找内容输入区,区分大小写选项及方向选项。在方向选项中向上和向下只能选择一个。实行查找时,获取光标位置,将文本区内容和查找输入框的内容均转成字符串形式。在文本内容字符串中根据用户选择方向及光标位置来规定相应的搜索范围,查找目标字符串,并显示出来。如果没选区分大小写,则需将两个字符串的大写内容调用“LowerCase()方法转成小写,再进行搜索。查找的主要代码实现如下:jit21.addActionListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)jrbl.addActionLi
18、stener(newActionListenerO方向唯publicvoidactionPerformed(ActionEvente)jrb2.setSelected(false););jrb2.addActionListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)jrbl,SetSelected(false););jrbl.SetSelected(true);jbc.addActionListener(newActionListenerO编写查找。publicvoidactionPerformed(ActionE
19、vente)intIoc=jt.getCaretPosition();Stringsc=jtf.getText();将输入框的内容转成字符串。向上查找。区分大小写。if(jrbl.isSelected()if(jcb.isSelected()Strings=jt.getTet();文本内容转成字符串。System.out.println(s);Stringsi=s.substring(0,Ioc-u);设置杳找范围。if(si.IastIndexOf(Sc)!=-1)jt.select(si.IastIndexOf(sc)j显示出的内容si.IastIndexOf(Sc)+sc.length(
20、);elseJOptionPane.ShowMessageDiaLog(nullj”找不到+竺:+jtf.getTet()+二);显示找不到。sc.length();)u=sc.length();else不区分大小写。Strings=Jt.getText();System.out.println(s);s=s.toLowerCase();sc=sc.toLowerCase();Stringsi=s.substring(0,Ioc-u);if(si.IastIndexOf(Sc)!=-1)jt.select(si.IastIndexOf(Sc)j显示找出的内容。si.IastIndexOf(Sc
21、)+elseJOptionPane.ShowMessageDiaLog(nullj”找二=二+jtf.getText()+,i,显示找不到。)u=sc.length();)if(jrb2.isSelected()向下查找。if(jcb.isSelected()Strings=jt.getText();Stringsi=s.substring(loc);if(si.IastIndexOf(SC)!=-1)显示找出的内容。jt.select(si.indexf(sc)+Iocsl.indexf(sc)+Ioc+sc.length();elseJOptionPane.ShowMessageDiaLo
22、g(nullj”找不至g+jtf.getText()+,i,显示找不到)elseStrings=jt.getText();s=s.toLowerCase();sc=sc.toLowerCase();Stringsi=s.substring(loc);if(si.IastIndexOf(Sc)!=-1)jt.select(si.indexf(sc)+Ioc,sl.indexf(sc)+Ioc+sc.length();显示找出的内容。elseJOPtionPane.s力OWMeSSageDiaLog(null,“找不到“+jtf.getTet()+&);显示找不到。);JButtonjb2=new
23、JButtonf,r,*);jb2.addActIonListener(newActionListenerOpublicvoidactionPerformed(ActionEvente)jfc.SetVisible(false);););3.2.6替换的实现实现替换功能,只需在查找的基础之上在替换对话框中添加替换内容输入区。在查找功能的下方,添加替换内容输入区,并在查找过程后将用户输入的替换内容用replaceSelected方法替换到原文本。替换功能的主要部分的代码实现如下:jbcl.addActionListener(newActionListenerOpublicvoidactionPe
24、rformed(ActionEvente)jt.replaceSelection(jtfl.getTet();)其余功能与查找相同);第4章调试及发现问题的解决在编程的过程中难免会遇到功能上的缺失及漏洞,通过这一次课程设计,我感觉对我来说以下三个是印象最深刻的问题:1、如何使这个记事本所编辑的内容在换行输入时能够与Windows下的记事本兼容显示?解决方法:在老师的提醒下和保存时先建立一个缓存区,将文档以字符数组的形式,运用循环查找换行符,一旦查找到换行符,便用.newLine()方法便记录到下一行,再次循环找到下一个换行符,也记录到下一行,这样即可与WineIOWS的记事本兼容。2、在测试时
25、发现新建文本时没有自动判断用户之前文本是否做过改动。解决方法:判断是否修改过上一个文本其实无非就两种情况,第一种是在空文本中直接编辑,第二种是在打开某一文件后再进行编辑。经过思考和与同学的探讨后,在外部建一个静态字符串strl,设为空值。将打开功能里的值也放在Strl中。之后在新建里建一个字符串str2,将文本区当前内容以字符串形式传给Str2。这时判断Strl与str2是否相同?如果不同,则前文本发生改动,弹出文件对话框,提示保存上一个文本Str2。3、在查找时发现只能查到离光标最近对的那一个,不能实现查找全部对象。解决方法:经过多次测试发现substring区间开闭问题导致查找范围出现了差
26、错,使程序光标一直停留在原始位置。于是我开始考虑光标位置是否需要减去查找内容的字符串长度,经过一番试验我发现向上查找光标位置需要减去查找内容的字符串,而向下查找时不需要。第5章程序测试及分析打开记事本显示的是文件编辑两个菜单栏,和文本输入区,可以在文本区输入任意内容。在文本区输入本人班级、姓名及学号。如图5T所示,是对编辑的测试。图5-1对编辑功能的测试在编辑过的文本区内,点击文件菜单内的新建则可新建一个空的文档,如果对上一个文本进行修改则会提示保存。如图5-2所示,是对新建的测试。图5-2对新建功能的测试点击打开,则会跳出文件选择对话框。如图5-3所示是对打开的测试。图5-3对打开功能的测试
27、在第一次编辑时进行保存(另存为)则会弹出对话框,让用户选择保存位置。如图5-4所示是对保存的测试。图5-4测试第一次保存(另存为)功能图5-5是对WindOWS记事本换行方面的兼容性测试。对象是测试.txt口测试.tt-记事本I-Qf文件(F)编帽(E)格式(O)M(V)帮助(三)软件1412却依飞学号:141003330215图5-5对Windows记事本兼容性的测试图5-6是对查找功能的测试。图5-6对查找功能的测试图5-7是对替换功能的测试。5-7对替换功能的测试第6章总结通过这次的课程设计,我自学并学会了如何使用GUI,让程序也能有图形界面了。在这个过程中,我对java中文字内容以流的
28、形式储存及把字节转成字符串方式读取内容有了些见解。此外,我还学会了调用Java包中的文件,如:java.awt.*、java.io.*、javax.swing.*的部分内容。程序还涉及到了JaVa布局和事件监听。在这次的课程设计对我未来的编程生涯来说主要有以下几个收获:1、编程不能想当然,要细致思考才能做出合格的作品。就像保存和另存为的区别在路径考虑上的问题:一开始我曾把保存功能做得和另存为一样。之后在同学的提醒下,打开了Windows的记事本才发现其中的异同,其中最主要的区别便是再打开已编辑过的文档,保存是可以直接存到打开时选择的路径,而另存为不行。在发现问题后我仔细思索才发现文本是否含有路
29、径才是解决这个问题的关键,也是我攻克难点之一。2、学好JaVa一定要有主动查APl文档的习惯。当老师让我把我做的记事本和Windows平台下的记事本实现换行兼容时,我一脸迷茫,去请教班上JaVa较好的同学,他们建议我去查一查APl文档,当无奈的我找到.newLine()这个方法时顿时豁然开朗,脑海里不禁又想起了老师在课堂上一再强调APl对于学习JaVa语言的重要性。3、初学者学习编程一定要有一种严格要求自己的态度。在这次编程的过程中老师的严格要求和同学严谨态度的感染下,我也尽量简陋的程序也改得美观一点。既然可以做,为什么我不做好一点?通过这一次学习,我不仅磨练了技术,更重要的是培养了自己的学习态度和学习习惯。这次JaVa课程设计中,我成功编出了一个简单的记事本程序,虽然还有些许漏洞。但在这个过程中,我不仅学会了大量的JaVa编程方法,还激发了自己的潜能,可以说是一个前所未有的挑战。努力和坚持是完成这次课程设计的关键因素。除此之外,我很想感谢悉心教导的老师和同学,是你们对我不足之处的指出及悉心帮助,才能使我将我的程序进一步完善。这一次的课程设计让我受益匪浅,是一次不可多得的学习经历。参考文献1宋波,李晋,李妙妍,张悦.JaVa程序设计M.北京:清华大学出版社,2011.