JAVA课程设计文本编辑器.docx
- 文档编号:16084624
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:18
- 大小:972.85KB
JAVA课程设计文本编辑器.docx
《JAVA课程设计文本编辑器.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计文本编辑器.docx(18页珍藏版)》请在冰点文库上搜索。
JAVA课程设计文本编辑器
《Java语言》课程期末作业
题目第8题,文本编辑器
学院计算机学院
专业计算机科学与技术
班别
学号
姓名
2010年12月11日
一、课程题目
制作一个简单的文本编辑器,交互性要求:
(1)可输入文字(仅要求英文及标点符号)
(2)实现一些常用的编辑功能:
如复制和粘贴,查找和替换,首字母自动大写,拼写自动更正……
(3)可打开并显示TXT文件,并且可以将编辑结果保存为TXT文件
二、题目分析与设计
1.所使用的开发环境:
Eclipse
2.论述题目的需求。
本程序要构建的记事本程序参照了Windows操作系统的记事本工具,其功能有以下几个方面:
①菜单栏中有“文件”,“编辑”,“格式”“关于”四个主菜单。
②“文件”菜单有“打开”“保存”“另存为”“退出”四个菜单项:
分别用于打开文件,保存文件,另存为文件,退出记事本。
③“编辑”菜单中有“剪切”“复制”“粘贴”“查找”“替换”“全选”五个菜单项:
用于实现剪切所选文字,复制所选文字,粘贴文字,查找,替换和文本的全选等功能。
④“格式”中有“字体”“自动换行”两个菜单项:
用来实现对文本的字体设置(包括字体的颜色、大小、风格)和自动换行这两个功能;
⑤“关于”菜单中有“基本资料”菜单项:
用于输出文本编辑器程序的作者的信息。
软件功能架构图。
3.论述界面设计过程,指出其设计上的创意及组件的布局策略。
这个简单文本编辑器的设计可分为下面的六个部分来分析:
⑴简单框架的建立
第一步就是建立框架,我直接利用所建TextEditor主类直接继承JFrame,这个框架类包含了一个构造器(设置了框架的大小)和一个initComponents()方法(用于初始化各个组件),同时在initComponents()方法里利用setTitle方法为框架添加了标题——“简单文本编辑器”。
第二步利用addWindowListener添加这个框架的事件监听器(主要是当鼠标点击关闭按钮时实现框架的关闭)。
第三步就是往这个框架添加JScrollPane滚动板,这是为了实现当文本区域大小超过框架大小时,就出现了滚动条。
⑵添加编辑区
在第一部分中已经建立了一个带有滚动条的框架,接下来,我们利用JTextArea类建立一个文本域对象,并且添加进框架里。
同时,利用getDocument().addDocumentListener方法为文本域添加一个文档事件监听器,主要是为了实现当文本域里面有改动时,就设置changed这个boolean变量(判断是否有改动)为真。
⑶添加菜单
对于这个简单文本编辑器它的菜单组件如下
“文件”菜单里:
“编辑”菜单里
“格式”菜单里
“关于”菜单里
首先,在主类TextEditor的类成员变量定义里,利用JMenuBar定义一个菜单里,利用JMenu定义“文件”、“编辑”等菜单,利用JMenuItem定义“新建”、“打开”、“复制”、“黏贴”等菜单项,利用JSeparate定义菜单分隔条变量,利用JCheckBoxMenuItem定义一个有选项勾的“自动换行”菜单项。
第二步,在initComponents()方法里创建这些选项对象。
第三步,利用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有不同于按钮等其它组件的监听器,下面这段是该监听器的原型:
ument().addDocumentListener(newjavax.swing.event.DocumentListener(){
publicvoidchangedUpdate(DocumentEvente){//这是更改操作的处理
//……
}
publicvoidinsertUpdate(DocumentEvente){//这是插入操作的处理
//……
}
publicvoidremoveUpdate(DocumentEvente){//这是删除操作的处理
//……
}});
这样JTextArea就可以实时监听,即你对文本域进行任意操作事件都会有响应。
我们可以在里面添加改变changed的方法。
⑵关于打开文件
当我们要读取另一个文件时,首先要判断changed的值(即判断当前文本域内是否有改动)。
当文本域内有改动时,就要事先保存当前文本域,所以要调用doSave()方法。
不过保存之前要利用调出一个选择窗口,供用户选择。
代码实现中,我们定义一个n(int型)用于获取用户的选择。
n=(
_MESSAGE,null,option,option[0]);
然后再用swtich让n与、
OPTION、这三个int型的值比较,判断用于是选择了那个按钮,再执行相应的操作。
若当文本域内没有改动时,就执行读文件操作。
⑶关于保存文件
保存文件用到的doSave()和doSaveAs()之间的联系是,当执行doSave()保存操作时,首先判断当前文件是否有文件名,即fileName是否为null,若是则调用doSaveAs()方法。
若执行doSaveAs()方法时,首先调用一个用户保存文件地址的窗口,再利用fileName=fileDialog.getDirectory()+File.separator+fileDialog.getFile();对fileName这个文件名进行设置,再执行保存操作。
⑷关于读取或保存文件操作时所用到的“流”的解析
当数据源需要将数据传输到某个目标的时候,那么他们之间就应该建立一个连接,这个连接我们就称之为流。
比如当我们在一个程序中需要读取磁盘上某个文件时,这时文件就相当于目标,运行中的程序就相当于数据源,我们需要把目标的数据读入到程序中来,就是通过流作为中间媒介传输这些数据的。
因此我们有个类FileInputStream。
同样,当我们需要将程序中的某些数据输出到磁盘文件中时,那么这个时候程序就相当于数据源,文件就是目标。
并在他们中间建立一个供数据传输的连接——流,也有个类FileOutputStream。
这两个类是基于字节的文件读入写出流。
首先要明确是需要读取还是写入操作,从而选择是使用FileInputStream类还是FileOutputStream类。
一般这些类当中都有read()或者write()方法,一个是读入流的方法,一个是写入流的方法。
当完成读入或输出后,最后要使用close()关闭流连接,刷新缓存,释放资源。
以文件的保存为例。
首先我们先创建一个输出流对象,FileOutputStreamoutputStream=newFileOutputStream(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.自动换行测试
有自动换行功能的:
取消自动换行功能的:
以上所有测试的结果都跟windows操作系统的记事本进行了比较,功能实现方面都基本正确无误。
程序还包含许多功能,比如新建、保存、退出、剪切、全选等功能,功能基本都没问题,测试结果不再一一截图。
附录:
源代码
一个defaultpackage包,四个类:
TextEditor、Search、Replace、FontForm,如下图所示:
TextEditor:
程序的入口,包括主界面的布局
Search:
创建查找窗口,实现文本域内对字符串的查找
Replace:
创建替换窗口,实现对文本域内对指定字符串的替换
FontForm:
字体设置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA课程设计 文本编辑器 JAVA 课程设计 文本 编辑器