




免费预览已结束,剩余24页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软 件 学 院课程设计报告书课程名称 设计题目 文本编辑器的设计与实现 专业班级 xxxxxxxxxxx 学 号 xxxxxxxxxx 姓 名 xxx 指导教师 2011 年 11月1 设计时间2011年11月2 设计目的面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。目前文本编辑器种类很多,所提供的功能也很多,但是能满足用户实现多种功能和进行java的编译与运行很少,不能更好的适应当前用户的要求。本设计所完成的文本编辑器功能是针对学习java程序语言,因此我们利用java程序设计虚拟机和软件对用户及使用者的应用过程形成一整套完整的编写代码,编译,运行。3设计任务文本编辑器的设计与实现:设计一个类似于windows记事本(notepad)的java程序。可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。4 设计内容 4.1需求分析 需求分析的任务是确定功能必须完成的工作,也就是对目标系统提出完整、准确、清晰、具体的要求。简单文本编辑器提供给用户基本的纯文本编辑功能,能够将用户录入的文本存储到本地磁盘中。能够读取磁盘中现有的纯文本文件,以及方便用户进行需要的编辑功能。文件操作能够实现新建、保存、打开文档等,编辑操作能过实现文本的剪贴、复制、粘贴等,格式操作能过实现字体设置、背景等,帮助操作能够实现关于主题的查看等功能。4.2概要设计4.2.1程序基本功能概括 文本编辑器格式编辑黏贴打开 菜单保存新建退出另存为文件剪切黏贴查找复制字体字号插入对象替换 图4.2.1 功能架构图4.2.2程序主要组件概括1.基本的frame框架;2.菜单;3.打开文件对话框;4.保存文件对话框;5.颜色对话框;6.choice下拉列表,运来实现字体设置;7.简单的帮助框架。4.3详细设计4.3.1文件打开与保存文本编辑器的保存和打开功能的实现用文件对话框及输入输出流来完成。先建立打开和保存对话框,在public void actionperformed(actionevent e)里分别用filewriter()和filereader()方法实现保存和打开。filedialog_save=new filedialog(this,保存文件对话框,filedialog.save);filedialog_save.setvisible(false);filedialog_load=new filedialog(this,保存文件对话框,filedialog.load);filedialog_load.setvisible(false);filedialog_save.addwindowlistener(new windowadapter()public void windowclosing(windowevent e)filedialog_save.setvisible(false););filedialog_load.addwindowlistener(new windowadapter()public void windowclosing(windowevent e)filedialog_load.setvisible(false); );public void actionperformed(actionevent e)if(e.getsource()=itemsave)filedialog_save.setvisible(true);if(filedialog_save.getfile()!=null)try file file=new file(filedialog_save.getdirectory(), filedialog_save.getfile(); tofile=new filewriter(file); out=new bufferedwriter(tofile); out.write(area.gettext(),0,(area.gettext().length(); out.close(); tofile.close();catch(ioexception e1) else if(e.getsource()=itemload)filedialog_load.setvisible(true);area.settext(null);string s;if(filedialog_load.getfile()!=null)tryfile file=new file(filedialog_load.getdirectory(), filedialog_load.getfile(); file_reader=new filereader(file); in=new bufferedreader(file_reader); while(s=in.readline()!=null) area.append(s+n); in.close(); file_reader.close();catch(ioexception e1) 4.3.2字体,字形,字体大小的设置文本编辑器要实现对字体的设置,选用了graphicsenvironment对象调用string getavailablefontfamilynames()方法,该方法可以获取计算机上所有可用的字体名称,并存放到字符串数组中。choice list;graphicsenvironment ge=graphicsenvironment.getlocalgraphicsenvironment(); string fontname=ge.getavailablefontfamilynames();public void itemstatechanged(itemevent e)string name=list.getselecteditem();font f=new font(name,font.plain,15);area.setfont(f); else if(e.getsource()=item8) /设置字形(常规,倾斜,加粗)font font=area.getfont(); int style=font.getstyle();style=style0; area.setfont(new font(,style,font.getsize();else if(e.getsource()=item9)font font=area.getfont(); int style=font.getstyle();style=style2; area.setfont(new font(,style,font.getsize();else if(e.getsource()=item10)font font=area.getfont();int style=font.getstyle();style=style1; area.setfont(new font(,style,font.getsize();else if(e.getsource()=item11) /设置字体大小font font=area.getfont();int style=font.getstyle();area.setfont(new font(font.getname(),style,12);else if(e.getsource()=item12)font font=area.getfont();int style=font.getstyle(); area.setfont(new font(font.getname(),style,24);else if(e.getsource()=item13)font font=area.getfont();int style=font.getstyle(); area.setfont(new font(font.getname(),style,36);4.3.3剪切,复制,粘贴设置文本编辑器中关于剪切,复制,粘贴功能的实现选用处理jtextarea的documentevent事件,通过area.cut(),area.copy(),area.paste()方法,点击“编辑”中相应菜单项可以选择将文本区中选中的内容剪切,复制,粘贴。 public void changedupdate(documentevent e) string s=area.gettext();public void removeupdate(documentevent e)changedupdate(e);public void insertupdate(documentevent e)changedupdate(e);public void actionperformed(actionevent e) else if(e.getsource()=item2) area.cut();else if(e.getsource()=item3)area.copy();else if(e.getsource()=item4)area.paste(); 4.3.4插入子菜单,删除子菜单,创建格式菜单及其菜单项 jmenuitem insertitem=new jmenuitem(插入文本(k); insertitem.setmnemonic(k); editmenu.add(insertitem); insertitem.addactionlistener( new actionlistener() public void actionperformed(actionevent event) jpanel insertpanel=new jpanel(); jlabel insertlabel=new jlabel(要插入的内容); jtextfield inputtext=new jtextfield(10); insertpanel.add(insertlabel); insertpanel.add(inputtext); joptionpane.showmessagedialog(null,insertpanel); int fromindex=displaytext.getcaretposition();/取得当前的光标位置 displaytext.insert(inputtext.gettext(),fromindex); ); jmenuitem removeitem=new jmenuitem(删除(g); removeitem.setmnemonic(g); editmenu.add(removeitem); removeitem.addactionlistener(new actionlistener() public void actionperformed(actionevent e) int start=displaytext.getselectionstart(); int end=displaytext.getselectionend(); displaytext.replacerange(null,start,end); ); editmenu.addseparator(); bar.add( editmenu );/add editmenu jmenu formatmenu = new jmenu( 格式(r) ); formatmenu.setmnemonic( r );4.3.5创建,添加帮助菜项 jmenu helpmenu = new jmenu( 帮助(h) ); helpmenu.setmnemonic( h ); jmenuitem helpitem = new jmenuitem( 帮助主题(h). ); helpitem.setmnemonic( h ); helpmenu.add( helpitem ); helpitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jtextarea helptext = new jtextarea( jscrollpane scroller = new jscrollpane(helptext); joptionpane.showmessagedialog(null,scroller); ); bar.add( helpmenu ); /添加4.4设计成果4.4.1运行界面 图1文本编辑器中字体颜色界面 图2 文本编辑器主界面 图3文本编辑器编辑界面 图4文本编辑器文件界面 图5文本编辑器格式 图6文本编辑器查找界面 图7 文本编辑器帮助界面 图8文本编辑器字体名称界面 图9文本编辑器字体风格界面 图10文本编辑器中帮助中关于对话框 图11查找消息对话框 图12文本编辑器中另存为对话框4.4.2主要代码import java.awt.*;import java.awt.event.*;import java.awt.datatransfer.*;import javax.swing.*;import java.io.*;import java.lang.*; public class notepad extends jframe private final color colorvalues = color.black, color.blue, color.red, color.green ; /定义颜色数组 string stylenames = bold, italic ;/定义风格数组 string fontnames = 宋体, 华文行楷, 隶书 ;/字体数组 string sizestring = new string30;/字号数组 int size = new int30;/与字号数组对应的字号整数,用于设置文字大小 private jradiobuttonmenuitem coloritems, fonts; private jcheckboxmenuitem styleitems; private jtextarea displaytext;/定义文本编辑区 private buttongroup fontgroup, colorgroup;/字体组,跟字色组 private int style;/字体风格 private jscrollpane scroll;/为文本编辑区提供滚动条 private string selecttext = ;/存放文本编辑区中选中的文本内容 private jcombobox stylebox,fontbox,sizebox;/工具栏 private jpanel toolpanel;/存放工具栏 private int rownumber = 0; private filedialog fd = new filedialog(this); / set up gui public notepad() super( 记事本 ); /创建菜单条 jmenubar bar = new jmenubar(); setjmenubar( bar ) / 设置文件菜单及其菜单项 jmenu filemenu = new jmenu( 文件(f) ); filemenu.setmnemonic( f ); / 设置新建菜单项 jmenuitem newitem = new jmenuitem( 新建(n) ); newitem.setmnemonic( n ); filemenu.add( newitem ); newitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) displaytext.settext(); ); / 设置打开菜单项 jmenuitem openitem = new jmenuitem( 打开(o) ); openitem.setmnemonic( o ); filemenu.add( openitem ); openitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) fd.settitle(打开); /设置标题 fd.show();if (fd.getfile() != null) file file = new file(fd.getfile(); /用从fd中取得的文件建立新文件,即打开的文件 displaytext.settext( );try filereader f = new filereader(file);bufferedreader b = new bufferedreader(f);/按行读打开的文件,然后传入文本域string s;try while (s = b.readline() != null) displaytext.append(s + n);/将给定文本追加到文本域的当前文本(即把读的内容加入文本域)f.close();b.close(); catch (ioexception ex) catch (filenotfoundexception ex) else return; ); filemenu.addseparator(); /加分隔线 / 设置退出菜单项 jmenuitem exititem = new jmenuitem( 退出(x) ); exititem.setmnemonic( x ); filemenu.add( exititem ); exititem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) system.exit( 0 ); );bar.add( filemenu ); /剪切菜单选项 jmenuitem cutitem = new jmenuitem( 剪切(t) ); cutitem.setmnemonic( t ); editmenu.add( cutitem ); cutitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) selecttext = displaytext.getselectedtext();/取得选定的文本int start = displaytext.getselectionstart();/选定的文本的开始位置int end = displaytext.getselectionend();/选定的文本的结束位置displaytext.replacerange(, start, end);/*用指定替换文本替换指定开始位置与结束位置之间的文本。 这里指定替换文本为空,即为剪切了文本*/ ); /复制菜单选项 jmenuitem copyitem = new jmenuitem( 复制(c) ); copyitem.setmnemonic( c ); editmenu.add( copyitem ); copyitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) selecttext = displaytext.getselectedtext();/获得选中的内容,并保存在selecttext里 ); /粘贴的实现 jmenuitem pasteitem = new jmenuitem( 粘贴(p) ); pasteitem.setmnemonic( p ); editmenu.add( pasteitem ); pasteitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) int position = displaytext.getcaretposition();/获得鼠标当前位置 displaytext.insert( selecttext,position );/插入到鼠标当前位置 ); editmenu.addseparator();/加分隔线 /替换的实现 jmenuitem swapitem = new jmenuitem( 替换(r)) ); swapitem.setmnemonic( r ); editmenu.add( swapitem ); swapitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel lookuplabel=new jlabel(要替换的内容); jtextfield inputtext=new jtextfield(10); jlabel swaplabel=new jlabel(替换为:); jtextfield changetotext=new jtextfield(10); swappanel.add(lookuplabel); swappanel.add(inputtext); swappanel.add(swaplabel); swappanel.add(changetotext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/获得整个文本内容 string changetext=text.replacefirst(inputtext.gettext(),changetotext.gettext();/获得替换后的内容 displaytext.settext(changetext); ); /全部替换的实现 jmenuitem aswapitem = new jmenuitem( 全部替换(q)) ); aswapitem.setmnemonic( q ); editmenu.add( aswapitem ); aswapitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel lookuplabel=new jlabel(要替换的内容); jtextfield inputtext=new jtextfield(10); jlabel swaplabel=new jlabel(替换为:); jtextfield changetotext=new jtextfield(10); swappanel.add(lookuplabel); swappanel.add(inputtext); swappanel.add(swaplabel); swappanel.add(changetotext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/获得整个文本内容 string changetext=text.replaceall(inputtext.gettext(),changetotext.gettext();/获得替换后的内容 displaytext.settext(changetext); ); editmenu.addseparator();/加分隔线 /自动换行的功能切换 jmenuitem changeitem = new jmenuitem( 自动换行(w) ); changeitem.setmnemonic( w ); formatmenu.add( changeitem ); changeitem.addactionlistener( new actionlistener() boolean var = false; public void actionperformed( actionevent event ) if(var) var = false; else var=true; displaytext.setlinewrap(var); ); / 创建字体按钮监听器 for ( int count = 0; count fonts.length; count+ ) fonts count = new jradiobuttonmenuitem( fontnames count ); fontmenu.add( fonts count ); fontgroup.add( fonts count ); fonts count .addactionlistener( itemhandler ); / 默认字体 fonts 0 .setselected( true ); fontmenu.addseparator(); /创建查找菜单 jmenu searchmenu = new jmenu( 查找(s) ); searchmenu.setmnemonic( h ); /添加向前查找菜单项 jmenuitem frontitem = new jmenuitem( 向前查找(f) ); frontitem.setmnemonic( f ); searchmenu.add( frontitem ); frontitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel seeklabel=new jlabel(要查找的内容); jtextfield inputtext=new jtextfield(20); swappanel.add(seeklabel); swappanel.add(inputtext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/获得整个文本内容 int fromindex=displaytext.getcaretposition();/取得当前的光标位置 int lastfromindex=text.indexof(inputtext.gettext(),fromindex);/获得查找后的位置 displaytext.setcaretposition(lastfromindex); displaytext.movecaretposition(lastfromindex+inputtext.gettext().length();/使查找到的子字符串显示出来 ); /添加向后查找菜单项 jmenuitem backitem = new jmenuitem( 向后查找(b) ); backitem.setmnemonic( b ); searchmenu.add( backitem ); backitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel seeklabel=new jlabel(要查找的内容); jtextfield inputtext=new jtextfield(20); swappanel.add(seeklabel); swappanel.add(inputtext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/获得整个文本内容 int fromindex=displaytext.getcaretposition();/取得当前的光标位置 int lastfromindex=text.lastindexof(inputtext.gettext(),fromindex);/获得查找后的位置 displaytext.setcaretposition(lastfromindex); displaytext.movecaretposition(lastfromindex+inputtext.gettext().length();/使查找到的子字符串显示出来 ); bar.add( searchmenu ); /添加 / 设置“关于(a).”菜单项 jmenuitem aboutitem = new jmenuitem( 关于(a). ); aboutitem.setmnemonic( a ); helpmenu.add( aboutitem ); aboutitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) joptionpane.showmessagedialog( notepad.this, 文本编辑器nc辽宁工程技术大学, 关于, joptionpane.plain_message ); rownumber = displaytext.getrows(); joptionpane.showmessagedialog(null,+ rownumber); ); / 设置面板显示文本 d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 说课课件模板卡通
- 2025企业产品代理销售合同模板
- 2025《设备租赁合同》补充协议书
- 2025科技公司与员工合同范本
- 2025中级会计师知识点《合同解除、违约责任》
- 2025代理合同样本
- 诗词鉴赏炼字课件
- 红绿灯识别知识培训内容课件
- 红海盐度高的原因
- 红楼梦课件图
- 项目部刻章申请书
- 版挖掘机租赁合同
- 语言学概论全套教学课件
- JJF 1265-2022生物计量术语及定义
- GB/T 8118-2010电弧焊机通用技术条件
- GB/T 17421.7-2016机床检验通则第7部分:回转轴线的几何精度
- 电工技能测试
- 药事管理学全套课件
- 社区心理学课件
- 质量整改通知单(样板)
- 2020届高三北京高考“多文本阅读”总攻略
评论
0/150
提交评论