《java课程设计--制作一个简易的记事本.docx》由会员分享,可在线阅读,更多相关《java课程设计--制作一个简易的记事本.docx(13页珍藏版)》请在课桌文档上搜索。
1、第1章课题概述21.1 课题的目的21.2 课题的要求21.2.1 主界面的要求21.2.2 程序实现的功能要求2第2章概要设计32.1 整个程序的模块结构及流程32.2 主界面的设计3第3章程序功能的实现53.1 主函数的实现53.2 主要功能模块的实现53.2.1保存的实现53.2.2另存为的实现62.4.3打开的实现72.4.4查找的实现72.4.5替换的实现92.4.6字体的实现10第4章调试及发现问题的解决11第5章程序测试及分析12第6章总结14参考文献15第1章课题概述本次JAVA课程设计的题目是制作一个简易的记事本程序(包括保存、另存为、查找、替换等功能)。1.1 课题的目的记
2、事本程序是日常生活中常用的记录文字的程序。人们往往会通过在本子上手写去记录下一些事件,然而文字数量一旦增加,或者随着时间推移纸张的变质,手写便成了一种负担。由于计算机的存储量较大,操作又比较简便,因此,采用特定的方法,通过编写计算机程序的方式来实现输入文字、保存、另存为、打开、查找、替换和字体设置等功能,这无疑是具有较大的实际意义。1.2 课题的要求1.2. 1主界面的要求(1)程序运行后应首先屏幕上显示出一个主界面,左上角标有记事本三字,赋有窗口缩小放大和关闭和文本输入的功能,并将文件、编辑、格式等功能罗列在主菜单上供用户进行选择,以便进行相应的操作。(2)文本文字应能够从键盘输入,并且输入
3、过程中可以不断更新输入文字信息。(3)主界面右侧应有一个滚动条。当鼠标移到主菜单上各选项时,应下拉出相应的子功能。1.2.2程序实现的功能要求(1)文本的输入通过建立一个文本域来进行。(2)选择路径后,输入的文本通过节点流放入缓存中,通过不断写入刷新,以实现保存和另存为的功能。(4)通过事件响应,弹出打开对话框,选择要打开的文档,通过节点流放入一个数组中,读取数组中的内容并且将读取的字符串拼接,以此实现打开功能。(5)确定光标位置,根据选择是否要区分大小写,使用SeleCt方法在整个文档中查找需要的内容。(6)根据选择是否要区分大小写,输入查找内容后和要替换的内容,利用replaceAll方法
4、或replaceFirst方法来实现替换和全部替换功能。(7)创建JDiaIOg对话框,将字体设置的要求放入列表中并添加滚动条,通过点击做出事件回应,调用SetFont方法加以实现字体设置功能。第2章概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为保存、另存为、打开、查找、替换、字体这六个主要模块。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还应提供退出程序的助模块。程序各功能模块的划分,及主要流程如图2-1整个程序各功能模块间的流程2.2主界面的设计由于用户的入需要一个界面来完成,这个界面除了要有窗口缩小、放大和关闭的功能,其本身的大小不随输入的过程
5、而改变,这时,就需要一个图形界面来完成这些功能。首先,通过调用系统的JFranIe来构造一个框架,设置标题,窗口的大小以及使窗口可见,this.SetDefau1tCIoseOperation(JFrame.DISPOSE_ON_CLOSE)这个方法的使用可以在点击窗口右上角的小红叉时关闭窗口,这样就完成了一个简易的图形界面。其次,为了实现记事本的各功能,要创建一个容器。还需在图形界面上添加菜单栏,使用川enuBar方法创建一个水平菜单栏,将其添加进容器并置于容器最北边,利用JMerm方法编辑出“文件”“编辑”和“格式”三部分,分别将其添加进川enuBar中,在利用JMenUItein编辑出“
6、保存”“另存为”“打开”“查找”替换和字体”,分别添加进JMenU中,并且用addSeparator()方法添加分割线。最后,也是最主要的,实现文字输入,通过JTCXtArea方法实现文本域,给这个文本域设置大小,这样就可以文字输入了。还要在文本域里添加一个滚动条,将这个滚动条添加进容器里,滚动条的功能得以实现。由此,整个主界面的设计得以完成。如图2-2所示。图2-2主界面设计第3章程序功能的实现3.1主函数的实现程序运行,从主方法入手,调用NOteBook的方法,继而进入主类执行程序,显示一个图形界面,屏幕上会显示出记事本界面。然后根据用户选择的菜单项,调用相应的功能模块,功能模块调用过程中
7、或调用结束后,输出程序功能的执行结果。publicstaticvoidmain(Stringargs)newNoteBook();)3.2主要功能模块的实现3.2.1保存的实现保存功能模块首先需要得到输入的文本信息,实现对于“保存”事件的监听。利用一个if循环,如果路径为空,调用一个JDialog方法,构造一个保存对话框,选择文件和路径后,将其放入一个节点流中,将此节点流放入缓存中,不断写入,不断刷新,直至结束,关闭此流。如果路径不为空,直接在节点流中写入新信息,不断刷新,直至结束,关闭此流。保存功能的代码实现如下:publicvoidactiOnPerformcd(ActionEvente)
8、(Strings2=jta.getText();得到文本信息if(e.getSource()=jmil)Stringfilepath=null;if(filepath=null)JFramejf=newJFramC();fd.setVisible(true);创建保存对话框FileDialogfd=newFilcDialog(jf,“保存,FileDialog.SAVE);StringfilePath=fd.getDirectory();StringfiIeName=fd.getFile();filepath=filePath+fiIeName;得到文件的绝对路径tryFileWriterfo
9、s=newFileWriter(filepath+”.txt);BuffercdWriterbw=newBuffercdWriter(fos);放入缓存中charch=s2.toCharArray();for(inti=0;in,)(bw.newLine();continue;)bw.write(chi);写入信息)bw.flush();bw.close();catch(FileNotFoundExceptionel)(el.PrintStackTrace();)catch(IOExccptionel)el.PrintStackTrace();)3.2.2另存为的实现另存为功能模块和保存功能模
10、块十分相似,与保存功能相比,另存为少了if循环的判断,直接调用一个JDialOg方法,构造一个保存对话框,选择文件和路径后,将其放入一个节点流中,将此节点流放入缓存中,不断写入,不断刷新,直至结束,关闭此流。另存为功能的代码实现如下:publicvoidactionPerformed(ActionEvente)(Strings2=jta.getText();得到文本信息if(e.getSource()=jmi2)(JFramejf2=newJFrame();fd.setVisible(true);创建另存为对话框FileDialogfd=newFiIeDialog(jf2,”另存为,FileD
11、ialog.SAVE);StringfilePath=fd.getDirectory();StringfiIeName=fd.getFile();try(FileWriterfos=newFileWriter(filePath+fiIeName+”.txt);BufferedWriterbw=newBuffercdWriter(fos);放入缓存中charch=s2.toCharArray();for(inti=0;ich.length-1;i+)if(chi=n)bw.newLine();continue;)bw.write(chi);写入信息)bw.flush();bw.close();c
12、atch(FileNotFoundExceptionel)el.PrintStackTrace();catch(IOExccptionel)el.PrintStackTrace();)2.4.3打开的实现打开功能模块的实现首先需要实现对于“打开”事件的监听。调用一个JDialOg方法,构造一个打开对话框,选择文件和路径后,将其放入一个节点流中,将此节点流里的内容放入一个长度为1024的数组中,并且定义一个空字符串,读取数组中的内容,通过While循环执行,只要没有读到最后的内容,就不断拼接读到的字符串,最后将此字符串通过SetTeXt()方法在文本域中显示。打开功能的代码实现如下:public
13、voidactionPerformed(ActionEvente)Strings2=jta.getText();得到文本域的内容if(e.getSource()=jmi3)JFramejfl=newJFrame();fd.setVisible(true);创建打开对话框FileDialogfd=newFileDialog(jf1,打开“,FileDialog.LOAD);StringfiIePath=fd.getDirectory();StringfiIeName=fd.getFile();tryFileInputStreamfis=newFileInputStream(fiIePath+fi
14、IeName);byteb=newbyte1024;Stringsi=”;while(true)inttemp=fis.read(b);读取节点流里的内容放入数组if(temp=-1)break;si+=newString(b,0,temp);拼接读取的字符串jta.setText(si);文本域中显示内容catch(FileNotFoundExceptionel)el.PrintStackTrace();catch(IOExceptionel)el.PrintStackTrace();2.4.4查找的实现查找功能模块的实现首先需要实现对于“查找”事件的监听,并且对调用一个自己构造的FindR
15、eplaceDialog方法。关于此方法的实现先要调用一个JDiaIog方法,构造一个查找和替换对话框,通过getCaretPosition()方法确定光标的位置并且通过getText()方法获得要查找的内容,通过if循环判断,如果区分大小写被选择,再进行内部的if循环,如果从光标位置开始到最后出现了要查找的内容,选中要查找的内容,否则就显示一个找不到“”(查找的内容)的对话框。如果区分大小写没有被选择,那么只需在此前的内部if循环执行前添加一个toLowerCase()方法,把要查找的内容和整个文本的内容都变成小写,其余步骤和之前一样就能实现了。查找功能的代码实现如下:publicvoida
16、ctiOnPerformed(ActionEvente)Strings2=jta.getText();获取文本域内容if(e.getSource()=jmi4)newFinClRePlaCeDialog(this);调用构造方法classFindReplaceDialogextendsJDialogimplementsActionListenerpublicvoidactionPerformed(ActionEventarg)intIoc=jta.getCaretPosition();获取光标位置Stringsc=findEditl.getText();获取查找的内容if(checkBox.i
17、sSelected()选择区分大小写Strings=jta.getText();Stringsi=s.Substring(Ioc);if(si.IastInclexOf(sc)!=-1)找查找内容jta.select(si.indexf(sc)+loc,si.IndexOf(sc)+Ioc+sc.length();elseJOptionPane.ShowMessageDialog(null,找不到+findEditl.getText()+“);else不区分大小写Strings=jta.getText();s二s.toLowerCase();转为小写sc=sc.toLowerCase();St
18、ringsi=s,Substring(Ioc);if(si.IastInclexOf(sc)!=-1)jta.select(si.indexf(sc)+loc,si.indexf(sc)+Ioc+sc.IengthO);elseJOptionPane.ShowMessageDialog(null,找不到”+findEditl.getText()+););2.4.5替换的实现替换功能模块的实现首先需要实现对于“替换”事件的监听,并且对调用一个自己构造的FindReplaceDialog方法。关于此方法的实现先要调用一个JDiaIog方法,构造一个查找和替换对话框。替换有分为替换和全部替换,全部替
19、换需要通过一个if循环判断,如果文本域中包含要查找的内容,调用一个replaceAll()方法将内容替换并且在文本域中显示,并且显示替换成功对话框,否则显示替换字符不存在的对话框。替换需要通过一个while循环实现,内部if循环判断,如果文本域中不包含要查找的内容,显示找不到相关内容的对话框,否则调用replaceFirst()方法替换查找内容,根据While循环的条件不断改变是否执行循环。替换功能的代码实现如下:publicvoidactionPerformed(ActionEvente)Strings2=jta.getText();获得文本域内容if(e.getSource()=jmi5)
20、newFindReplaceDialog(this);调用构造方法publicvoidactionPerformed(ActionEvente)if(e.getSource()=0KBtn3)if(jta.getText().contains(findEditl.getText()jta.setText(jta.getText().replaceAll(findEditl.getText(),findEdit2.getText();替换全部JOptionPane.ShowMessageDialog(this,替换成功!”);elseJOptionPane.ShowMessageDialog(t
21、his,替换字符不存在!);elseif(e.getSource()=CancelBtn)JOptionPane.ShowMessageDialog(this,确认取消!);dispose();elseif(e.getSource()=0KBtn2)booleanflag=true;while(flag)if(!(jta.getText().contains(findEditl.getText()JOptionPane.ShowMessageDialog(this,找不到+findEditl.getText()+,相关的的内容!);jta.setText(jta.getText().repla
22、ceFirst(findEditl.getText(),findEdit2.getText();/替换flag=false;2.4.6字体的实现字体功能模块的实现首先需要实现对于“字体”事件的监听,并且调用一个自己构造的SetFontDialOg()方法,关于此方法的调用要先调用一个JDiaIOg方法,创建一个字体设置的界面,把字体、字形和大小分别放入数组中,直接调用数组使用即可。字体功能的代码实现如下:publicvoidactionPerformed(ActionEvente)if(e.getSource()=jmi6)newSetFontDialog(this);)classSetFon
23、tDialogextendsJDialogimplementsListSelectionListener,ActionListener,ItemListenerStringjl=宋体,黑体,华文行楷,隶书,华文隶书;Stringj2口=常规,粗体,斜体;Stringj3=8,12,14,16,18,20,22,24,26,30,32,34,36,40,42;publicvoidactionPerformed(ActionEvente)if(e.getSource()=jbl)jta.setFont(newFont(font,fontMessage,SiZe);调用方法dispose();els
24、eif(e.getSource()=jb2)dispose();)publicvoidValueChanged(ListSelectionEvente)if(e.getSource()=jlistl)调用数组for(inti=0;ijl.length;i+)if(jlistl.getSelectedValue().equals(jli)font=jli;if(e.getSource()=jlist2)for(inti=0;ij2.length;i+)if(jlist2.getSelectedValue().equals(j2i)fontMessage=i;if(e.getSource()=jl
25、ist3)for(inti=0;ij3.length;i+)if(jlist3.getSelectedValue().equals(j3i)size=Integer,parselnt(j3i);)第4章调试及发现问题的解决虽然在程序的编写过程中遇到了很多问题,但是通过上网查阅相关资料,与其它同学讨论,询问指导老师等方式,最终都一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、在记事本中插入分行保存后在WindoWS系统中打开如何显示分行?解决方法:在保存和另存为功能中进行修改,把文本信息放进字符数组中,在这个数组中查找nL一旦查找到就插入一个分行,最后在吧所有内容写进缓存中。2
26、、怎么实现查找功能并且使每一项都显示出来?解决方法:一定要先知道光标的位置,才可以由此进行查找。通过getCaretPosition()方法确定光标的位置并且通过getText()方法获得要查找的内容,通过if循环判断,如果区分大小写被选择,再进行内部的if循环,如果从光标位置开始到最后出现了要查找的内容,选中要查找的内容,否则就显示一个找不到“”(查找的内容)的对话框。如果区分大小写没有被选择,那么只需在此前的内部if循环执行前添加一个toLowerCase()方法,把要查找的内容和整个文本的内容都变成小写,其余步骤和之前一样就能实现了。3、字体功能实现时怎么实现选择好想要的字形、字体和大小
27、就改变(不用JTextField实现)解决方法:分别把字体、字形和大小的选择项放入三个数组中,利用确定按钮的监听来实现改变字体,当确定按钮被点击时,调用SetFont()方法,用ValueChanged来实施监听器的回应,利用一个for循环,在数组中找下标,再用一个if循环,如果得到的数组下标和之前数组的下标相等,那么就调用这个方法。由此,字体功能实现。第5章程序测试及分析运行程序,首先显示程序主界面,列出的功能选项有保存、另存为、打开、查找、替换、字体等。保存功能模块首先需要得到输入的文本信息,实现对于“保存”事件的监听。第一次的保存功能相当于另存为功能,而第二次保存开始,因为已经有了路径,
28、所以直接将文本信息写入缓存中即可。保存功能对话框如图5-1所示。图5-1保存对话框另存为功能模块和保存功能模块十分相似,与保存功能相比,另存为少了if循环对路径的判断,在选择好文件的绝对路径后,直接写入缓存中即可。另存为功能如图5-2所示。图5-2另存为对话框打开功能模块的实现首先需要实现对于“打开”事件的监听。选择文件和路径后,将内容放入数组中,读取数组中的内容,通过WhiIe循环执行,只要没有读到最后的内容,就不断拼接读到的字符串,最后将此字符串通过SetTeXtO方法在文本域中显示。打开功能对话框如图5-3所示。图5-3打开对话框查找和替换功能模块的实现首先需要实现对于“查找和替换”事件
29、的监听。查找和替换功能对话框如图5-4所示。图5-4查找和替换对话框字体功能模块的实现首先需要实现对于“字体”事件的监听,把字体、字形和大小分别放入数组中,直接调用数组使用即可。字体功能对话框如图5-5所示。图5-5字体对话框第6章总结通过一周的课程设计,我独立完成了简易的记事本程序,写出了将近五百行代码的程序。更重要的是通过这次实践,加深了我对JaVa编程相关知识的理解。总结起来,主要有以下几点体会:1、程序设计语言的基础一定要扎实。编写程序的过程中,我遇到了很多的问题,有一些可以考翻书和上网查询来解决,可是有一些却不能。直至问了一些基础好的同学才明白。这就令我起了反思,基础好的同学,因为听
30、课认真,课后多下苦工,所以有着很好的编程基础,当他们遇到问题时,就可以靠着扎实的基础解决问题,所以,我也一定要培养好扎实的基础,不但要认真听讲,还需多看些课外书来增强JaVa编程的基础。2、编程不能操之过急,也不能一味依附他人。程序的编写过程,不能一蹴而就,它应该是一个循环渐进,不断完善直至完美的过程。编写程序,特别是编写功能庞大,且逻辑结构较为复杂的程序,不要妄想一口气将所有的功能都非常完美地实现。不能为了完成任务而去编程,编程靠的是自己,遇到问题不能退缩,只想着去问别人或者靠别人帮你解决问题,这样,不但自己没有成就感,不会的地方还是不会,下次遇到类似的问题还是不会去解决,所以说编程中遇到困
31、难,一定要自己想办法去解决,去弄懂,只有这样,才能进步。3、耐心地去调试程序;测试程序时,应重点关注边界条件和特殊细节。绝大多数程序不是只要编写完就能运行,所以当程序编写完一定要进行细地测试。如果发现测试结果不对或不够完美,则需要沉下心来,仔细检查程序中的每一个环节和漏洞。细节决定成败,不主动边界条件或者是特殊细节,可能导致整个程序运行时出错,千里之堤溃于蚁穴。4、养成良好的学习态度和学习习惯,培养正确的学习方法。编写复杂的计算机程序必须学会独立思考,不懂的地方可以上网或到图书馆查阅资料,可以去询问同学,遇到实在无法理解或解决的问题时,要主动向老师请教。这次数据结构课程设计,使我在课题分析、主界面的实现、相关方法的设计,以及编程实践等多方面都得到了锻炼。主要是依靠自身的努力,顺利地完成了本次课程设计任务。感谢在此过程中帮助过我的指导老师和各位同学!参考文献1袁海燕王文涛.JAVA实用程序设计100例.北京:人民邮电出版社,2005.52黄明梁旭周绍斌.Java课程设计.北京:电子工业出版社,2006.63张晨付冰赵军.Java2应用编程150例.北京:电子工业出版社,2003.9