Java课程设计-简单的记事本程序_第1页
Java课程设计-简单的记事本程序_第2页
Java课程设计-简单的记事本程序_第3页
Java课程设计-简单的记事本程序_第4页
Java课程设计-简单的记事本程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章课题概述仿照Window系统中的“记事本”利用Java的GUI和文件输入输出流实现一个简单的记事本程序。要求能实现编辑、保存、另存为、查找和替换等功能。1.1课题的目的记事本是当代计算机操作系统当中功能最强大的工具之一,用户不仅可以用它记录生活和工作上的事,还可以用它来编写程序。如今我想运用自己学的java知识来编写一个记事本程序,同时可以利用Java的跨平台性,以达到多个平台兼容运行的目的。1.2课题的要求1.2.1界面要求:(1)程序运行时,上方应显示记事本三个字,程序中还需显示文件和编辑两个菜单供用户选择。程序窗口可以自由地被用户拉伸,大小也可以改变。(2)用户可以看到自己在文本框内随意编辑的文字内容。(3)用户在点击文件和编辑两个菜单时可以看到二级菜单选项。文件菜单中可看到新建、打开、保存、另存为,编辑菜单中可看到查找、替换。1.2.2程序功能要求:(1)用户可以通过点击新建来开启一个新的输入文本区,并能提醒用户保存上一个编辑的文本。(2)用户在本程序编辑的文本可以做到与Windows中的记事本在换行方面相兼容。(3)可以查找出文本内用户规定的查找对象,并进行替换。1.3设备与环境硬件:多媒体计算机。软件:java集成开发环境、操作系统。 第2章概要设计2.1整个程序的模块结构运行程序首先可以看到文件和和编辑两个菜单选项。点击文件可以看到新建、打开、保存和另存为这四个选项。而点击编辑则会看到查找和替换两个选项。整个程序的模块图2-1所示。图2-1整个程序的模块2.2各个功能的描述2.2.1新建功能用户可以编辑完一个文本后,建一个新的文本,还能提醒用户保存前一个编辑过的文本,一定程度上可以减少用户误删文档的几率。2.2.2打开功能打开功能可以让用户在电脑中找到并打开之前编辑过的文本,会弹出文件对话框,用户选择路径找到目标文件,可进行后续编辑操作。2.2.3保存功能需要判断用户是否是首次保存文本。如果是首次编辑,保存时需选择存储路径。如果是打开并修改已编辑过的文本,此时保存,则会和打开的路径一致,不会有任何对话框弹出。2.2.4另存为功能另存为功能是让用户选择新的存储路径,与第一次保存相同,只要触发这个功能,保存时都会弹出文件对话框,要求用户需选择存储路径。2.2.5查找功能查找功能是本课程设计的难点,能找出在查找区域内规定的内容。参照Windows下的记事本,需要增加查找方向,区分大小写。进行一次具体的查找流程请见图2-2。图2-2进行一次查找的具体流程2.2.6替换功能替换功能是基于查找功能,此外还多增加的一个能够替换原文本编辑区域中选定内容的功能。可以帮助用户方便地更换内容。第3章程序功能的实现3.1主窗口的实现在程序中调用JFrame、JMenu、JMenuItem等给程序添加窗口、菜单、菜单选项和实现某些功能需弹出的对话框。实现主窗口的代码如下:finalJFramejf=newJFrame("记事本"); JMenuBarjmb=newJMenuBar(); JMenujm1=newJMenu("文件"); JMenujm2=newJMenu("编辑"); jta=newJTextArea(); JMenuItemjit11=newJMenuItem("新建");JMenuItemjit12=newJMenuItem("打开");JMenuItemjit13=newJMenuItem("保存");JMenuItemjit14=newJMenuItem("另存为");JMenuItemjit21=newJMenuItem("查找");JMenuItemjit22=newJMenuItem("替换");……//功能代码省略。jm1.add(jit11); jm1.add(jit12); jm1.add(jit13); jm1.add(jit14); jm2.add(jit21); jm2.add(jit22); jmb.add(jm1); jmb.add(jm2); jf.add(jta); jf.setJMenuBar(jmb); jf.setSize(500,500); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口。 }}3.2各个功能的实现3.2.1新建的实现实现简单新建功能只要将文本框内容设置为空即可,但是要判断上一个文本是否改动?如果改动,需提示用户保存,并套用第一次保存的方法。新建的代码实现如下:jit11.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr2=jta.getText(); if(str1.equals(str2)){//文本是否改变? jta.setText(""); }else{//提醒用户保存上个文本。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"请选择保存路径",FileDialog.SAVE); fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName; try{……}//此处省略,方法与保存功能相同,只需将写入对象由str1改为str2即可。catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); }J jta.setText(""); } } });3.2.2打开的实现实现打开功能,首先需要弹出文件对话框,并且设置为可见,让用户选择.txt文件。先定义一个字节流b,将已经读写进来文本的字节流通过循环传给b,将读出来的东西返回给int型的temp。当读取结束,将所有数组的值以字符串的形式传给给str,并显示。打开的代码实现如下:jit12.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JFramejf1=newJFrame();FileDialogfd=newFileDialog(jf1,"打开",FileDialog.LOAD);//打开框。 fd.setVisible(true); StringfilefPath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filefPath+fileName;//获取绝对路径。 try{ FileInputStreamfis=newFileInputStream(filepath); byte[]b=newbyte[1024];//定义字节流 Stringstr=""; while(true){ inttemp=fis.read(b); if(temp==-1){//文件已读完 break;//跳出循环 } str+=newString(b,0,temp);//将字节存储的内容以字符串形式传给str。 } str1=str; jta.setText(str); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });3.2.3保存的实现实现保存功能,需要考虑考虑两种情况:用ifelse语句判断用户是否是第一次编辑,如果用户是第一次编辑文本时,需要弹出文件对话框,让用户选择保存路径。如果是先打开曾经编辑过的文档,则路径是和打开的路径一致。保存时先建立一个缓存区,将文档转成字符数组的形式后,查找换行符,一旦查找到换行符,便记录到下一行,以便兼容Windows的原生记事本,最后写入电脑。保存的代码实现如下:jit13.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); if(filepath==null){//判断路径是否为空。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"保存",FileDialog.SAVE);//弹出保存对话框。 fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName;//获取绝对路径。 } try{ FileWriterfw=newFileWriter(filepath+".txt"); BufferedWriterbw=newBufferedWriter(fw); char[]ch=str1.toCharArray(); for(inti=0;i<=ch.length-1;i++){ if(ch[i]=='\n')//如果遇见换行符则开启新的一行。{bw.newLine(); continue; } bw.write(ch[i]);//写入电脑。 } bw.flush(); bw.close(); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } }});3.2.4另存为的实现实现另存为功能,和保存功能类似,但不需要考虑用户是否是第一次编辑,一直让用户选择保存路径。保存时先建立一个缓存区,将文档以字符数组的形式,查找其中的换行符,一旦查找到换行符,便记录到下一行,以便兼容Windows的原生记事本。然后写入电脑。另存为的主要代码实现如下:jit14.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); JFramejf2=newJFrame();//不需要判断绝对路径是否存在。 FileDialogfd=newFileDialog(jf2,"另存为",FileDialog.SAVE); fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); try{……}//内容与保存一样 catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });3.2.5查找的实现实现查找功能,需弹出以Windows记事本为原型,布局好的查找对话框。在对话框中设置查找内容输入区,区分大小写选项及方向选项。在方向选项中向上和向下只能选择一个。实行查找时,获取光标位置,将文本区内容和查找输入框的内容均转成字符串形式。在文本内容字符串中根据用户选择方向及光标位置来规定相应的搜索范围,查找目标字符串,并显示出来。如果没选区分大小写,则需将两个字符串的大写内容调用toLowerCase()方法转成小写,再进行搜索。查找的主要代码实现如下:jit21.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jrb1.addActionListener(newActionListener()//方向唯一{ publicvoidactionPerformed(ActionEvente){ jrb2.setSelected(false); } }); jrb2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jrb1.setSelected(false); } }); jrb1.setSelected(true); jbc.addActionListener(newActionListener(){//编写查找。 publicvoidactionPerformed(ActionEvente){ intloc=jta.getCaretPosition(); Stringsc=jtf.getText();//将输入框的内容转成字符串。 if(jrb1.isSelected()){//向上查找。 if(jcb.isSelected()){//区分大小写。 Strings=jta.getText();//文本内容转成字符串。 System.out.println(s); Strings1=s.substring(0,loc-u);//设置查找范围。 if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.lastIndexOf(sc),//显示出的内容 s1.lastIndexOf(sc)+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//显示找不到。 } u=sc.length(); }else{//不区分大小写。 Strings=jta.getText(); System.out.println(s); s=s.toLowerCase(); sc=sc.toLowerCase(); Strings1=s.substring(0,loc-u); if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.lastIndexOf(sc),//显示找出的内容。 s1.lastIndexOf(sc)+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//显示找不到。 } u=sc.length(); } } if(jrb2.isSelected()){//向下查找。 if(jcb.isSelected()){ Strings=jta.getText(); Strings1=s.substring(loc); if(s1.lastIndexOf(sc)!=-1){//显示找出的内容。 jta.select(s1.indexOf(sc)+loc, s1.indexOf(sc)+loc+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//显示找不到。 } }else{ Strings=jta.getText(); s=s.toLowerCase(); sc=sc.toLowerCase(); Strings1=s.substring(loc); if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.indexOf(sc)+loc, s1.indexOf(sc)+loc+sc.length());//显示找出的内容。 }else{ JOptionPane.showMessageDialog(null,"找不到""“"+jtf.getText()+"”");//显示找不到。 } } } } }); JButtonjb2=newJButton("取消"); jb2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jfc.setVisible(false); } }); });3.2.6替换的实现实现替换功能,只需在查找的基础之上在替换对话框中添加替换内容输入区。在查找功能的下方,添加替换内容输入区,并在查找过程后将用户输入的替换内容用replaceSelected方法替换到原文本。替换功能的主要部分的代码实现如下:jbc1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jta.replaceSelection(jtf1.getText()); } ……//其余功能与查找相同 }); 第4章调试及发现问题的解决在编程的过程中难免会遇到功能上的缺失及漏洞,通过这一次课程设计,我感觉对我来说以下三个是印象最深刻的问题:1、如何使这个记事本所编辑的内容在换行输入时能够与Windows下的记事本兼容显示?解决方法:在老师的提醒下和保存时先建立一个缓存区,将文档以字符数组的形式,运用循环查找换行符,一旦查找到换行符,便用.newLine()方法便记录到下一行,再次循环找到下一个换行符,也记录到下一行,这样即可与Windows的记事本兼容。2、在测试时发现新建文本时没有自动判断用户之前文本是否做过改动。解决方法:判断是否修改过上一个文本其实无非就两种情况,第一种是在空文本中直接编辑,第二种是在打开某一文件后再进行编辑。经过思考和与同学的探讨后,在外部建一个静态字符串str1,设为空值。将打开功能里的值也放在str1中。之后在新建里建一个字符串str2,将文本区当前内容以字符串形式传给str2。这时判断str1与str2是否相同?如果不同,则前文本发生改动,弹出文件对话框,提示保存上一个文本str2。3、在查找时发现只能查到离光标最近对的那一个,不能实现查找全部对象。解决方法:经过多次测试发现substring区间开闭问题导致查找范围出现了差错,使程序光标一直停留在原始位置。于是我开始考虑光标位置是否需要减去查找内容的字符串长度,经过一番试验我发现向上查找光标位置需要减去查找内容的字符串,而向下查找时不需要。第5章程序测试及分析打开记事本显示的是文件编辑两个菜单栏,和文本输入区,可以在文本区输入任意内容。在文本区输入本人班级、姓名及学号。如图5-1所示,是对编辑的测试。图5-1对编辑功能的测试在编辑过的文本区内,点击文件菜单内的新建则可新建一个空的文档,如果对上一个文本进行修改则会提示保存。如图5-2所示,是对新建的测试。图5-2对新建功能的测试点击打开,则会跳出文件选择对话框。如图5-3所示是对打开的测试。图5-3对打开功能的测试在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论