Java实训报告书文本编辑器.docx
- 文档编号:3275646
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:19
- 大小:289.66KB
Java实训报告书文本编辑器.docx
《Java实训报告书文本编辑器.docx》由会员分享,可在线阅读,更多相关《Java实训报告书文本编辑器.docx(19页珍藏版)》请在冰点文库上搜索。
Java实训报告书文本编辑器
实训报告书
实训名称:
Java程序设计实训
系(部):
信息工程系
专业班级:
计算机科学与技术
学生姓名:
学号:
指导教师:
完成日期:
实训课题
文本编辑器
实训人姓名
同组人员
实训日期
实训成绩
指导教师评语
指导教师签名:
______________
_______年____月____日
文本编辑器的设计和实现
1实训目的
1.1实训目的
《Java程序设计实训》是计算机专业一门重要的专业技术基础实践课程。
为了能够较好的完成实训任务,学生应具备软件开发技术的基础知识,实训的主要目的在于将理论与实际应用相结合,使用程序设计语言java,以及相关软件设计开发知识完成软件的设计开发任务。
本实训课程将为整个专业的学习以及软件设计水平的提高打下良好的基础,提高学生项目分析、设计、编写、调试和测试的能力,并培养基本的、良好的团队合作能力。
实训中目的是要综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握软件开发技术,提高分析、解决实际问题的能力
1.2实训要求
本次实训要求在学生能够较熟练使用java程序设计语言进行软件代码的编写,同时还要具备较好的项目分析的能力,加深对相关课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2文本编辑器系统的分析与设计
2.1系统功能描述
通过此系统可以实现如下功能:
1)可进行文件的新建、打开、保存、编辑等基本功能。
2)支持复制、剪切和粘贴操作
3)可进行查找和替换操作
2.2系统模块设计
根据系统自带的文档编辑器的特征设计,包括如下的功能模块:
一、整体结构框架包括:
菜单栏和文档编辑区
二、每个框架分别包含不同的子框架,各个模块的具体框架:
Ø菜单栏:
文件、编辑、工具、帮助
Ø菜单栏中各个子菜单功能
文件:
新建、打开、保存、另存为、退出
编辑:
剪切、复制、粘贴
工具:
查找、替换
帮助:
帮助
Ø子菜单功能的实现主要的几个功能介绍
1)打开与另存为:
两个窗体调用系统函数直接利用,注意格式的选择
2)查找:
查找内容、查找、查找下一个
Ø文本编辑区
监视文本内容是否改变、监听光标所在位置
2.3数据库结构设计
1.程序E-R图
3主要代码清单
3.1生成菜单栏及菜单项
在窗体初始化时,自动添加菜单及其菜单项,用于在文本编辑器中对文本去内容进行操作,使用for语句循环生成菜单栏和菜单项。
publicvoidaddmyMenu()//菜单函数,生成菜单
{
JMenuBarmenubar=newJMenuBar();//菜单栏添加若干菜单
this.setJMenuBar(menubar);
Stringmenustr[]={"文件","编辑","工具","帮助"};//菜单栏字符串数组
JMenumenu[]=newJMenu[menustr.length];
for(inti=0;i
menu[i]=newJMenu(menustr[i]);
menubar.add(menu[i]);
}
Stringmenuitemstr0[]={"新建","打开","保存","另存为","退出"};//文件菜单中添加若干菜单项
JMenuItemmenuitem0[]=newJMenuItem[menuitemstr0.length];
for(inti=0;i menuitem0[i]=newJMenuItem(menuitemstr0[i]); menu[0].add(menuitem0[i]); menuitem0[i].addActionListener(this);//为每个菜单项注册监听事件 } Stringmenuitemstr1[]={"剪切","复制","粘贴"};//编辑菜单中添加若干菜单项 JMenuItemmenuitem1[]=newJMenuItem[menuitemstr1.length]; for(inti=0;i menuitem1[i]=newJMenuItem(menuitemstr1[i]); menu[1].add(menuitem1[i]); menuitem1[i].addActionListener(this);//为每个菜单项注册监听事件 } Stringmenuitemstr2[]={"查找","替换"};//工具菜单中添加若干菜单项 JMenuItemmenuitem2[]=newJMenuItem[menuitemstr2.length]; for(inti=0;i menuitem2[i]=newJMenuItem(menuitemstr2[i]); menu[2].add(menuitem2[i]); menuitem2[i].addActionListener(this);//为每个菜单项注册监听事件 } JMenuItemmenuitemstr3=newJMenuItem("帮助");//帮助菜单中添加帮助菜单项 menu[3].add(menuitemstr3); menuitemstr3.addActionListener(this);//注册监听事件 } 3.2监听事件处理 注册监听事件,当进行操作时,监听事件活得事件源并选择相应的操作,对不同的事件调用不同的函数,得到文本操作的不同结果。 publicvoidactionPerformed(ActionEvente)//监听事件处理函数 { if(e.getSource()instanceofJMenuItem)//判断事件是否来自于菜单项 { if(e.getActionCommand()=="新建"){ FileName="未命名1"; text.replaceRange("",0,text.getText().length()); } if(e.getActionCommand()=="打开"){ open();//执行打开函数 } if(e.getActionCommand()=="保存"){ save();//执行保存函数 } if(e.getActionCommand()=="另存为"){ saveother();//执行另存为函数 } if(e.getActionCommand()=="退出") System.exit(0);//系统退出 if(e.getActionCommand()=="剪切") text.cut();//剪切 if(e.getActionCommand()=="复制") text.copy();//复制 if(e.getActionCommand()=="粘贴") text.paste();//粘贴 if(e.getActionCommand()=="查找"){ find();//执行查找函数 } if(e.getActionCommand()=="替换"){ replace();//执行替换函数 } if(e.getActionCommand()=="帮助"){//帮助消息窗体 JOptionPane.showMessageDialog(this, "该记事本程序属于个人所编写,由于时间仓促,难免有不足之处仅供初学者使用! ","帮助", JOptionPane.PLAIN_MESSAGE); } } } 4程序运行与测试 4.1文本区功能测试 a)字体的显示,开始的时候不做任何操作的时候显示的默认值,通过修改字体的属性来修改字体。 b)对文本事件进行监听,如果文本编辑窗口中如果有事件触发,关闭时能够有必要的信息提示。 c)状态栏的可以正常显示文本的状态信息。 4.2文件菜单功能测试 文件中的功能测试: a)通过文件字符流读取文件,创建缓冲区存储文件流。 b)当保存文件时,先判断文件是否未被保存过,如果未被保存过,则创建新文件并通过输出流来存储文件,当文件已经保存过再对文件进行修改时,则会提示保存的消息窗体。 c)另存为是通过不同的方法来创建一个新的文件。 附: 打开与保存代码: publicvoidopen()//打开函数 { FileDialogopen=newFileDialog(mainFrame,"打开",FileDialog.LOAD); open.setVisible(true); Filefile=newFile(open.getDirectory()+open.getFile()); Stringpath=file.getPath();//获得文件的路径 charFrist=path.charAt(0);//获取文件的第一个字符 if(Frist! ='n'){//判断是否为空 FileName=open.getDirectory()+open.getFile();//获取文件名 charch[]=null; try{ ch=newchar[(int)file.length()]; BufferedReaderbr=newBufferedReader(newFileReader(file));//文件度缓冲区 br.read(ch);//读文件 br.close(); }catch(FileNotFoundExceptionfe)//捕获异常 { JOptionPane.showMessageDialog(this,"文件没有打开! ");//显示消息提示窗口 System.exit(0); }catch(IOExceptionie)//捕获异常 { System.out.println("IOerror"); System.exit(0); } this.setTitle(FileName);//将窗体标题赋值为文件名 Stringtempo=newString(ch);//将字符数组赋值给字符串 text.setText(tempo);//文本显示区显示 } } publicvoidsave()//保存函数 { if(FileName.equals("未命名1"))//判断是否保存过 { FileDialogsave=newFileDialog(mainFrame,"保存",FileDialog.SAVE); save.setVisible(true); Stringtemps=text.getText();//获取文本去文字并复制给字符串temps try//异常处理 { Filef=newFile(save.getDirectory()+save.getFile());//新建文件 FileName=save.getDirectory()+save.getFile();//得到文件名 BufferedWriterbw=newBufferedWriter(newFileWriter(f));//输入到文件中 bw.write(temps,0,temps.length());//新文件写入 bw.close(); }catch(FileNotFoundExceptionfe_){ System.out.println("filenotfound"); System.exit(0); }catch(IOExceptionie_){ System.out.println("IOerror"); System.exit(0); } } else//如果文件已经保存过 { Strings=text.getText();//得到所输入的文本内容 try//异常处理 { Filef=newFile(FileName);//新建文件 BufferedWriterbw=newBufferedWriter(newFileWriter(f));//输入到文件中 bw.write(s,0,s.length()); bw.close(); JOptionPane.showMessageDialog(this,"保存成功"); }catch(FileNotFoundExceptionfe_){ System.out.println("filenotfound"); System.exit(0); }catch(IOExceptionie_){ System.out.println("IOerror"); System.exit(0); } } } 4.3编辑菜单功能测试 复制前粘贴后 剪切前剪切后 剪切、复制、粘贴功能的实现是在注册监听事件后,对文本去的文字进行操作时,系统调用文本类本身的库函数来处理文本去的文字操作,将选中的文本读入缓冲区。 然后再等待不同的操作方法的调用。 4.4工具菜单功能测试 功能描述: 查找需要先生成对应的窗体,使用相应的组件类来创建窗体,使用流布局管理器来对窗体中的各个控件进行布局,对查找和查找下一个按钮注册监听事件并编写相应的处理方法。 文本去的文字使用相应的处理方法进行比较和处理,并对光标位置进行判断是否到文本末尾,使用异常处理语句捕获异常并处理。 功能描述: 替换也是需要先生成相应的窗体,使用相应的组件类来创建窗体,使用流布局管理器来对窗体中的各个控件进行布局,对替换和清空按钮注册监听事件并编写相应的处理方法。 附: 查找替换函数处理代码: publicvoidfind()//查找函数 { find.setSize(300,100); find.setLocation(this.getX()+50,this.getY()+50); find.setResizable(false); find.setLayout(newFlowLayout());//窗体流布局 Labellabel1=newLabel("查找内容"); Buttonbutton1=newButton("查找"); Buttonbutton2=newButton("查找下一个"); find.add(label1); find.add(ltext1); find.add(button1); find.add(button2); //注册按钮的监听事件 button1.addActionListener(newActionListener(){//查找按钮事件方法 publicvoidactionPerformed(ActionEvente){ if(ltext1.getText()=="") ; else{ intlocate=text.getText().indexOf(ltext1.getText(),0); text.select(locate,locate+ltext1.getText().length()); fromindex=locate+ltext1.getText().length(); } } }); button2.addActionListener(newActionListener(){//查找下一个按钮方法 publicvoidactionPerformed(ActionEvente){ intlocate=text.getText() .indexOf(ltext1.getText(),fromindex); if(locate==-1) ltext1.setText("已查找到文件末尾! "); else{ text.select(locate,locate+ltext1.getText().length()); fromindex=locate+ltext1.getText().length(); } } }); find.addWindowListener(newWindowAdapter(){//关闭对话框窗口 publicvoidwindowClosing(WindowEventee){ find.dispose(); } }); find.show(); find.removeAll(); } publicvoidreplace()//替换函数 { replace.setSize(200,200); replace.setLocation(this.getX()+50,this.getY()+50); replace.setResizable(false); replace.setLayout(newFlowLayout()); Labellabel_1=newLabel("查找内容"); Labellabel_2=newLabel("替换为"); Buttonbutton_1=newButton("替换"); Buttonbutton_2=newButton("清空"); replace.add(label_1); replace.add(ltext2); replace.add(label_2); replace.add(ltext3); replace.add(button_1); replace.add(button_2); //注册按钮的监听事件 button_1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(ltext2.getText()=="") ; else{ intlocate=text.getText().indexOf(ltext2.getText(),0); text.select(locate,locate+ltext2.getText().length()); text.replaceRange(ltext3.getText(),locate,locate +ltext2.getText().length()); } } }); button_2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ltext2.setText(""); ltext3.setText(""); } }); replace.addWindowListener(newWindowAdapter(){//关闭对话框窗口 publicvoidwindowClosing(WindowEventee){ replace.dispose(); } }); replace.show(); replace.removeAll(); } 5实训总结 实训的时间很短,只有短短一周的时间,但是需要完成的工作很多,一个学期的java学习我们所学的并不是很多,本次实训我选取的是文本编辑器的设计。 虽然以前在c#中做过实训,但是c#是在图形用户界面中进行窗体的设计,是对窗体和Windows控件的操作,而在java中需要用代码来实现窗体的实例化和调用。 是要通过代码来实例化和创建窗体,并通过代码来调用,引入了java中的多个类来实现各个窗体和控件,并发现了自己的不足之处。 在窗体中需要加入文本编辑区来存储文本,这就需要创建文本对象并对其进行实例化,并且在编辑菜单中还需要多个方法来实现对文本的操作和处理,比如剪切和复制,用到本身的函数来操作。 对于所有的菜单和菜单项以及控件所做才操作处理都需要注册其相应的监听事件来完成,而在文件菜单中,打开的操作用到了文件的输入流,保存则用到了文本的输出流。 而在打开事件中所以遇到的错误在查阅了很多资料后在得以解决,并在此过程中学到了很多老师在课程中没有讲到的知识,是自己受益匪浅,在文件菜单中的保存中,需要用if语句进行相应的判断,来执行不同的代码实现,并与相应的异常处理语句相结合来完善程序,是代码哥哥具有健壮性和灵活性,减少程序运行时错误出现。 在查找和替换中,对于查找函数则需要判断许多不同的情况来进行不同,尤其是要如何实现查找和替换的功能是最关键的,需要使用什么样的方法来达到这一目的是最困难的,通过网络和同学的讨论发现很多同学也遇到了这个问题,而采用现成的代码是行不通的,必须自己在实现中进行一次次的修改,不断调整代码的运行方式来实现其功能。 由于时间仓促,还有许多其他的功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 报告书 文本 编辑器
![提示](https://static.bingdoc.com/images/bang_tan.gif)