已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言课程期末作业Java语言课程期末作业题 目 第8题,文本编辑器 学 院 计算机学院 专 业 计算机科学与技术 班 别 学 号 姓 名 2010年12月11日18一、课程题目 制作一个简单的文本编辑器,交互性要求: (1) 可输入文字(仅要求英文及标点符号)(2) 实现一些常用的编辑功能:如复制和粘贴,查找和替换,首字母自动大写,拼写自动更正(3) 可打开并显示TXT文件,并且可以将编辑结果保存为TXT文件二、题目分析与设计 1. 所使用的开发环境:Eclipse2. 论述题目的需求。本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面: 菜单栏中有“文件”,“编辑”,“格式”“关于”四个主菜单。 “文件”菜单有“打开”“保存”“另存为”“退出”四个菜单项:分别用于打开文件,保存文件,另存为文件,退出记事本。 “编辑”菜单中有“剪切”“复制”“粘贴”“查找”“替换”“全选”五个菜单项:用于实现剪切所选文字,复制所选文字,粘贴文字,查找,替换和文本的全选等功能。 “格式”中有“字体”“自动换行”两个菜单项:用来实现对文本的字体设置(包括字体的颜色、大小、风格)和自动换行这两个功能; “关于”菜单中有“基本资料”菜单项:用于输出文本编辑器程序的作者的信息。软件功能架构图。文本编辑器“格式”菜单“编辑”菜单替换新建“关于”菜单保存打开另存为退出“文件”菜单查找黏贴复制剪切字体自动换行基本资料全选3. 论述界面设计过程,指出其设计上的创意及组件的布局策略。这个简单文本编辑器的设计可分为下面的六个部分来分析: 简单框架的建立第一步就是建立框架,我直接利用所建TextEditor主类直接继承JFrame,这个框架类包含了一个构造器(设置了框架的大小)和一个initComponents() 方法(用于初始化各个组件),同时在initComponents() 方法里利用setTitle方法为框架添加了标题“简单文本编辑器”。第二步利用addWindowListener添加这个框架的事件监听器(主要是当鼠标点击关闭按钮时实现框架的关闭)。第三步就是往这个框架添加JScrollPane滚动板,这是为了实现当文本区域大小超过框架大小时,就出现了滚动条。 添加编辑区在第一部分中已经建立了一个带有滚动条的框架,接下来,我们利用JTextArea类建立一个文本域对象,并且添加进框架里。同时,利用getDocument().addDocumentListener方法为文本域添加一个文档事件监听器,主要是为了实现当文本域里面有改动时,就设置changed这个boolean变量(判断是否有改动)为真。 添加菜单对于这个简单文本编辑器它的菜单组件如下“文件”菜单里:“编辑”菜单里“格式”菜单里“关于”菜单里首先,在主类TextEditor的类成员变量定义里,利用JMenuBar定义一个菜单里,利用JMenu定义“文件”、“编辑”等菜单,利用JMenuItem定义“新建” 、“打开”、“复制”、“黏贴”等菜单项,利用JSeparate定义菜单分隔条变量,利用JCheckBoxMenuItem定义一个有选项勾的“自动换行”菜单项。第二步,在initComponents()方法里创建这些选项对象。第三步,利用setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)为有需要的选项添加快捷键。第四步,利用addActionListener方法添加菜单响应事件,每个菜单项关联到各自独立的事件监听器。第五步,把所有菜单项添加到相应的菜单上,再把每个菜单添加到菜单栏,最后把菜单栏添加进框架里面,最终效果就如下图所示: 编写事件相应代码以“新建”菜单项为例,在它的监听器中设置了该菜单项的动作响应函数为:newMenuItemActionPerformed()。在TextEditor类中,必须编写该函数的代码。否则,菜单也是什么也不做。 创建Search类、Replace类以及FontForm类以Search类为例。Search类实现“查找”功能,由于在实现查找功能时,要调出相应的对话框,需要重新创建一个JFrame框架,并且框架里面的按钮需要关联到相应的事件监听器上,所以比较复杂。所以不在TextEditor类里面定义,我们另外创建一个类,由TextEditor类调用。 完善文本编辑器菜单系统以“保存”菜单项为例。因为保存时,需要判断当前文本域里的文件是否有文件名,如果有文件名就执行保存操作,若没有则进行另存为操作。故我们直接把保存和另存为这两个功能提取出来,不在事件监听器设置代码里实现,而是在外面创建doSave()和doSaveAs()这两个函数,再由所需的事件监听器调用它们。这样就代码比较清晰,而且不会太过复杂。最后,在main函数里创建一个TextEditor对象,利用show()方法该文本编辑器框架显示出来。4. 论述程序逻辑的实现,包括类的设计、对象的协作过程等,必要时加以各种图形和表格辅助论述。不得以粘贴代码的方式代替设计部分。其中部分重点设计解析: 判断文本域内是否有改动我们在TextEditor这个主类里定义了一个boolean类型的changed变量,当changed为true时,则表面文本域内有改动。所以,我们要在文本域内添加事件监听器,当有改动时,就把changed设为true。但是JTextArea有不同于按钮等其它组件的监听器,下面这段是该监听器的原型:jTextField.getDocument().addDocumentListener(new javax.swing.event.DocumentListener()public void changedUpdate(DocumentEvent e) /这是更改操作的处理/ public void insertUpdate(DocumentEvent e) /这是插入操作的处理/ public void removeUpdate(DocumentEvent e) /这是删除操作的处理/ );这样JTextArea就可以实时监听,即你对文本域进行任意操作事件都会有响应。我们可以在里面添加改变changed的方法。 关于打开文件当我们要读取另一个文件时,首先要判断changed的值(即判断当前文本域内是否有改动)。当文本域内有改动时,就要事先保存当前文本域,所以要调用doSave()方法。不过保存之前要利用JOptionPane.showOptionDialog调出一个选择窗口,供用户选择。代码实现中,我们定义一个n(int型)用于获取用户的选择。n=JOptionPane.showOptionDialog(null, 你的文件还没有保存,你想现在保存吗?, 保存,JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, null, option, option0);然后再用swtich让n与JOptionPane.YES_NO_OPTION、JOptionPane.NO_OPTION、JOptionPane.CANCEL_OPTION这三个int型的值比较,判断用于是选择了那个按钮,再执行相应的操作。若当文本域内没有改动时,就执行读文件操作。 关于保存文件保存文件用到的doSave()和doSaveAs()之间的联系是,当执行doSave()保存操作时,首先判断当前文件是否有文件名,即fileName是否为null,若是则调用doSaveAs()方法。若执行doSaveAs()方法时,首先调用一个用户保存文件地址的窗口,再利用fileName = fileDialog.getDirectory()+File.separator+fileDialog.getFile();对fileName这个文件名进行设置,再执行保存操作。 关于读取或保存文件操作时所用到的“流”的解析当数据源需要将数据传输到某个目标的时候,那么他们之间就应该建立一个连接,这个连接我们就称之为流。比如当我们在一个程序中需要读取磁盘上某个文件时,这时文件就相当于目标,运行中的程序就相当于数据源,我们需要把目标的数据读入到程序中来,就是通过流作为中间媒介传输这些数据的。因此我们有个类FileInputStream。同样,当我们需要将程序中的某些数据输出到磁盘文件中时,那么这个时候程序就相当于数据源,文件就是目标。并在他们中间建立一个供数据传输的连接流,也有个类FileOutputStream。这两个类是基于字节的文件读入写出流。首先要明确是需要读取还是写入操作,从而选择是使用FileInputStream类还是FileOutputStream类。一般这些类当中都有read()或者write()方法,一个是读入流的方法,一个是写入流的方法。当完成读入或输出后,最后要使用close()关闭流连接,刷新缓存,释放资源。以文件的保存为例。首先我们先创建一个输出流对象,FileOutputStream outputStream = new FileOutputStream(fileName); 接着我们创建一个String类型的对象content,content = textArea.getText(); 这样content就保存了文本域内的所有字符。接着利用FileOutputStream的write()方法实现输出到文件里,outputStream.write(content.getBytes(); 最后一步,我们要用outputStream.close()方法关闭这个流。 关于查找的实现首先,创建一个String类型的对象text用于保存该文本域内的内容,再创建一个String类型的对象searchText用于获取要查找的内容。接着,创建一个StringBuffer类型的对象subText用于将要查找的内容转换成字符串。第三步,创建一个int型的searchPosition = textEditor.getCaretPosition(); 获取当前光标的位置,searchPosition默认从0开始计数。最后,indexOf方法实现从指定的索引开始搜索,并返回在此字符串中第一次出现指定字符处的索引。如果文本没有指定的字符串,则返回-1。a = text.indexOf(searchText, searchPosition);if (a != -1) textEditor.setSelectionStart(a);textEditor.setSelectionEnd(a + length);这样就实现了查找的功能,查找所得到的内容将会在文本域内显示出来。 关于使用setlayout(null)对控件的布局使用setlayout(null)后,就可以不用使用java提供的一些布局,而直接用像素坐标的形式来布局面板。可以用setbounds的形式,来确定哪个组件在什么位置,它不随面板大小的改变而改变。三、测试分析1. 文件打开测试打开文件后的文本编辑器:2. 文件另存为测试然后在打开窗口上就有刚才另存的文件3. 复制黏贴测试复制的文本(这是复制文件): 黏贴后的文本域: 4. 查找测试5. 替换测试替换之前:替换之后:6. 字体设置测试设置字体后:7. 自动换行测试有自动换行功能的:取消自动换行功能的:以上所有测试的结果都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机基础知识在线自测题
- 小学语文人物描写教学设计
- 燃气加气站服务合同范本
- 人力资源招聘流程全指南
- 情感维护小技巧与创意礼物
- 消防应急心理咨询方案范文(3篇)
- 工厂员工班组安全生产制度
- 新疆企业文化咨询策划方案(3篇)
- 咨询师培训线下培训方案(3篇)
- 白城法律咨询解决方案(3篇)
- 2025全国导游资格证考试《导游业务》真题库(含答案)
- 2025年法院检察院司法辅助岗面试真题及答案解析
- 中国软件行业协会:2025中国软件行业基准数据报告 SSM-BK-202509
- GB/T 4026-2025人机界面标志标识的基本和安全规则设备端子、导体终端和导体的标识
- 2025年陕西延安旅游集团有限公司招聘笔试参考题库含答案解析
- 体能训练概论(NSCA)
- Q∕SY 1736-2014 评标方法选择和评标标准编制规范
- 食品风味化学-6食品风味的调整和香味料
- 国家开放大学电大专科《美学与美育》简答题综合论述题题库及答案
- 闵行区加强住宅小区综合治理三年行动计划(2015-2017)
- ZZG22高频开关整流器 - 图文-
评论
0/150
提交评论