




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟 件 學(xué) 院課程設(shè)計(jì)報(bào)告書(shū)課程名稱(chēng) 設(shè)計(jì)題目 文本編輯器的設(shè)計(jì)與實(shí)現(xiàn) 專(zhuān)業(yè)班級(jí) xxxxxxxxxxx 學(xué) 號(hào) xxxxxxxxxx 姓 名 xxx 指導(dǎo)教師 2011 年 11月1 設(shè)計(jì)時(shí)間2011年11月2 設(shè)計(jì)目的面向?qū)ο蟪绦蛟O(shè)計(jì)是一門(mén)實(shí)踐性很強(qiáng)的計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)課程,課程設(shè)計(jì)是學(xué)習(xí)完該課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于通過(guò)實(shí)踐加深學(xué)生對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的理論、方法和基礎(chǔ)知識(shí)的理解,掌握使用java語(yǔ)言進(jìn)行面向?qū)ο笤O(shè)計(jì)的基本方法,提高運(yùn)用面向?qū)ο笾R(shí)分析實(shí)際問(wèn)題、解決實(shí)際問(wèn)題的能力,提高學(xué)生的應(yīng)用能力。目前文本編輯器種類(lèi)很多,所提供的功能也很多,但是能滿(mǎn)足用戶(hù)實(shí)現(xiàn)多種功能和進(jìn)行
2、java的編譯與運(yùn)行很少,不能更好的適應(yīng)當(dāng)前用戶(hù)的要求。本設(shè)計(jì)所完成的文本編輯器功能是針對(duì)學(xué)習(xí)java程序語(yǔ)言,因此我們利用java程序設(shè)計(jì)虛擬機(jī)和軟件對(duì)用戶(hù)及使用者的應(yīng)用過(guò)程形成一整套完整的編寫(xiě)代碼,編譯,運(yùn)行。3設(shè)計(jì)任務(wù)文本編輯器的設(shè)計(jì)與實(shí)現(xiàn):設(shè)計(jì)一個(gè)類(lèi)似于windows記事本(notepad)的java程序。可以打開(kāi)、新建、保存一個(gè)文本文件;對(duì)選中的文本進(jìn)行各種編輯操作(設(shè)置字體、字號(hào)、字型、對(duì)齊方式、背景、前景色、復(fù)制、粘貼、剪切、查找、替換等);在文本中能夠插入對(duì)象。4 設(shè)計(jì)內(nèi)容 4.1需求分析 需求分析的任務(wù)是確定功能必須完成的工作,也就是對(duì)目標(biāo)系統(tǒng)提出完整、準(zhǔn)確、清晰、具體的要求
3、。簡(jiǎn)單文本編輯器提供給用戶(hù)基本的純文本編輯功能,能夠?qū)⒂脩?hù)錄入的文本存儲(chǔ)到本地磁盤(pán)中。能夠讀取磁盤(pán)中現(xiàn)有的純文本文件,以及方便用戶(hù)進(jìn)行需要的編輯功能。文件操作能夠?qū)崿F(xiàn)新建、保存、打開(kāi)文檔等,編輯操作能過(guò)實(shí)現(xiàn)文本的剪貼、復(fù)制、粘貼等,格式操作能過(guò)實(shí)現(xiàn)字體設(shè)置、背景等,幫助操作能夠?qū)崿F(xiàn)關(guān)于主題的查看等功能。4.2概要設(shè)計(jì)4.2.1程序基本功能概括 文本編輯器格式編輯黏貼打開(kāi) 菜單保存新建退出另存為文件剪切黏貼查找復(fù)制字體字號(hào)插入對(duì)象替換 圖4.2.1 功能架構(gòu)圖4.2.2程序主要組件概括1.基本的frame框架;2.菜單;3.打開(kāi)文件對(duì)話(huà)框;4.保存文件對(duì)話(huà)框;5.顏色對(duì)話(huà)框;6.choice下拉
4、列表,運(yùn)來(lái)實(shí)現(xiàn)字體設(shè)置;7.簡(jiǎn)單的幫助框架。4.3詳細(xì)設(shè)計(jì)4.3.1文件打開(kāi)與保存文本編輯器的保存和打開(kāi)功能的實(shí)現(xiàn)用文件對(duì)話(huà)框及輸入輸出流來(lái)完成。先建立打開(kāi)和保存對(duì)話(huà)框,在public void actionperformed(actionevent e)里分別用filewriter()和filereader()方法實(shí)現(xiàn)保存和打開(kāi)。filedialog_save=new filedialog(this,保存文件對(duì)話(huà)框,filedialog.save);filedialog_save.setvisible(false);filedialog_load=new filedialog(this,保存
5、文件對(duì)話(huà)框,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.setvi
6、sible(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.w
7、rite(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.getfi
8、le(); 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字體,字形,字體大小的設(shè)置文本編輯器要實(shí)現(xiàn)對(duì)字體的設(shè)置,選用了graphicsenvironment對(duì)象調(diào)用string getavailablefontfamilynames()方法,該方法可以獲取計(jì)算機(jī)上所有可用的字體名稱(chēng),并存放到
9、字符串?dāng)?shù)組中。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)
10、/設(shè)置字形(常規(guī),傾斜,加粗)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 fon
11、t=area.getfont();int style=font.getstyle();style=style1; area.setfont(new font(,style,font.getsize();else if(e.getsource()=item11) /設(shè)置字體大小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=
12、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剪切,復(fù)制,粘貼設(shè)置文本編輯器中關(guān)于剪切,復(fù)制,粘貼功能的實(shí)現(xiàn)選用處理jtextarea的documentevent事件,通過(guò)area.cut(),area.copy(),area.paste()方法,點(diǎn)擊
13、“編輯”中相應(yīng)菜單項(xiàng)可以選擇將文本區(qū)中選中的內(nèi)容剪切,復(fù)制,粘貼。 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();
14、else if(e.getsource()=item3)area.copy();else if(e.getsource()=item4)area.paste(); 4.3.4插入子菜單,刪除子菜單,創(chuàng)建格式菜單及其菜單項(xiàng) jmenuitem insertitem=new jmenuitem(插入文本(k); insertitem.setmnemonic(k); editmenu.add(insertitem); insertitem.addactionlistener( new actionlistener() public void actionperformed(actionevent e
15、vent) jpanel insertpanel=new jpanel(); jlabel insertlabel=new jlabel(要插入的內(nèi)容); jtextfield inputtext=new jtextfield(10); insertpanel.add(insertlabel); insertpanel.add(inputtext); joptionpane.showmessagedialog(null,insertpanel); int fromindex=displaytext.getcaretposition();/取得當(dāng)前的光標(biāo)位置 displaytext.insert
16、(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.getselectione
17、nd(); displaytext.replacerange(null,start,end); ); editmenu.addseparator(); bar.add( editmenu );/add editmenu jmenu formatmenu = new jmenu( 格式(r) ); formatmenu.setmnemonic( r );4.3.5創(chuàng)建,添加幫助菜項(xiàng) jmenu helpmenu = new jmenu( 幫助(h) ); helpmenu.setmnemonic( h ); jmenuitem helpitem = new jmenuitem( 幫助主題(h).
18、 ); 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( h
19、elpmenu ); /添加4.4設(shè)計(jì)成果4.4.1運(yùn)行界面 圖1文本編輯器中字體顏色界面 圖2 文本編輯器主界面 圖3文本編輯器編輯界面 圖4文本編輯器文件界面 圖5文本編輯器格式 圖6文本編輯器查找界面 圖7 文本編輯器幫助界面 圖8文本編輯器字體名稱(chēng)界面 圖9文本編輯器字體風(fēng)格界面 圖10文本編輯器中幫助中關(guān)于對(duì)話(huà)框 圖11查找消息對(duì)話(huà)框 圖12文本編輯器中另存為對(duì)話(huà)框4.4.2主要代碼import java.awt.*;import java.awt.event.*;import java.awt.datatransfer.*;import javax.swing.*;import j
20、ava.io.*;import java.lang.*; public class notepad extends jframe private final color colorvalues = color.black, color.blue, color.red, color.green ; /定義顏色數(shù)組 string stylenames = bold, italic ;/定義風(fēng)格數(shù)組 string fontnames = 宋體, 華文行楷, 隸書(shū) ;/字體數(shù)組 string sizestring = new string30;/字號(hào)數(shù)組 int size = new int30;/與
21、字號(hào)數(shù)組對(duì)應(yīng)的字號(hào)整數(shù),用于設(shè)置文字大小 private jradiobuttonmenuitem coloritems, fonts; private jcheckboxmenuitem styleitems; private jtextarea displaytext;/定義文本編輯區(qū) private buttongroup fontgroup, colorgroup;/字體組,跟字色組 private int style;/字體風(fēng)格 private jscrollpane scroll;/為文本編輯區(qū)提供滾動(dòng)條 private string selecttext = ;/存放文本編輯區(qū)中
22、選中的文本內(nèi)容 private jcombobox stylebox,fontbox,sizebox;/工具欄 private jpanel toolpanel;/存放工具欄 private int rownumber = 0; private filedialog fd = new filedialog(this); / set up gui public notepad() super( 記事本 ); /創(chuàng)建菜單條 jmenubar bar = new jmenubar(); setjmenubar( bar ) / 設(shè)置文件菜單及其菜單項(xiàng) jmenu filemenu = new jme
23、nu( 文件(f) ); filemenu.setmnemonic( f ); / 設(shè)置新建菜單項(xiàng) jmenuitem newitem = new jmenuitem( 新建(n) ); newitem.setmnemonic( n ); filemenu.add( newitem ); newitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) displaytext.settext(); ); / 設(shè)置打開(kāi)菜單項(xiàng) jmenuitem openitem = n
24、ew jmenuitem( 打開(kāi)(o) ); openitem.setmnemonic( o ); filemenu.add( openitem ); openitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) fd.settitle(打開(kāi)); /設(shè)置標(biāo)題 fd.show();if (fd.getfile() != null) file file = new file(fd.getfile(); /用從fd中取得的文件建立新文件,即打開(kāi)的文件 displayt
25、ext.settext( );try filereader f = new filereader(file);bufferedreader b = new bufferedreader(f);/按行讀打開(kāi)的文件,然后傳入文本域string s;try while (s = b.readline() != null) displaytext.append(s + n);/將給定文本追加到文本域的當(dāng)前文本(即把讀的內(nèi)容加入文本域)f.close();b.close(); catch (ioexception ex) catch (filenotfoundexception ex) else ret
26、urn; ); filemenu.addseparator(); /加分隔線(xiàn) / 設(shè)置退出菜單項(xiàng) 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 ); /剪切菜單選項(xiàng) jmenui
27、tem 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();/選定的文本的開(kāi)始位置int end
28、= displaytext.getselectionend();/選定的文本的結(jié)束位置displaytext.replacerange(, start, end);/*用指定替換文本替換指定開(kāi)始位置與結(jié)束位置之間的文本。 這里指定替換文本為空,即為剪切了文本*/ ); /復(fù)制菜單選項(xiàng) jmenuitem copyitem = new jmenuitem( 復(fù)制(c) ); copyitem.setmnemonic( c ); editmenu.add( copyitem ); copyitem.addactionlistener( new actionlistener() public voi
29、d actionperformed( actionevent event ) selecttext = displaytext.getselectedtext();/獲得選中的內(nèi)容,并保存在selecttext里 ); /粘貼的實(shí)現(xiàn) jmenuitem pasteitem = new jmenuitem( 粘貼(p) ); pasteitem.setmnemonic( p ); editmenu.add( pasteitem ); pasteitem.addactionlistener( new actionlistener() public void actionperformed( act
30、ionevent event ) int position = displaytext.getcaretposition();/獲得鼠標(biāo)當(dāng)前位置 displaytext.insert( selecttext,position );/插入到鼠標(biāo)當(dāng)前位置 ); editmenu.addseparator();/加分隔線(xiàn) /替換的實(shí)現(xiàn) jmenuitem swapitem = new jmenuitem( 替換(r)) ); swapitem.setmnemonic( r ); editmenu.add( swapitem ); swapitem.addactionlistener( new act
31、ionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel lookuplabel=new jlabel(要替換的內(nèi)容); jtextfield inputtext=new jtextfield(10); jlabel swaplabel=new jlabel(替換為:); jtextfield changetotext=new jtextfield(10); swappanel.add(lookuplabel); swappanel.add(input
32、text); swappanel.add(swaplabel); swappanel.add(changetotext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/獲得整個(gè)文本內(nèi)容 string changetext=text.replacefirst(inputtext.gettext(),changetotext.gettext();/獲得替換后的內(nèi)容 displaytext.settext(changetext); ); /全部替換的實(shí)現(xiàn) jmenuitem asw
33、apitem = 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(要替換的內(nèi)容); jtextfield inputtext=new jtextfield(10);
34、 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();/獲得整個(gè)文本內(nèi)容 string changetext=te
35、xt.replaceall(inputtext.gettext(),changetotext.gettext();/獲得替換后的內(nèi)容 displaytext.settext(changetext); ); editmenu.addseparator();/加分隔線(xiàn) /自動(dòng)換行的功能切換 jmenuitem changeitem = new jmenuitem( 自動(dòng)換行(w) ); changeitem.setmnemonic( w ); formatmenu.add( changeitem ); changeitem.addactionlistener( new actionlistener
36、() boolean var = false; public void actionperformed( actionevent event ) if(var) var = false; else var=true; displaytext.setlinewrap(var); ); / 創(chuàng)建字體按鈕監(jiān)聽(tīng)器 for ( int count = 0; count fonts.length; count+ ) fonts count = new jradiobuttonmenuitem( fontnames count ); fontmenu.add( fonts count ); fontgrou
37、p.add( fonts count ); fonts count .addactionlistener( itemhandler ); / 默認(rèn)字體 fonts 0 .setselected( true ); fontmenu.addseparator(); /創(chuàng)建查找菜單 jmenu searchmenu = new jmenu( 查找(s) ); searchmenu.setmnemonic( h ); /添加向前查找菜單項(xiàng) jmenuitem frontitem = new jmenuitem( 向前查找(f) ); frontitem.setmnemonic( f ); search
38、menu.add( frontitem ); frontitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) jpanel swappanel=new jpanel(); jlabel seeklabel=new jlabel(要查找的內(nèi)容); jtextfield inputtext=new jtextfield(20); swappanel.add(seeklabel); swappanel.add(inputtext); joptionpane.showm
39、essagedialog(null,swappanel); string text=displaytext.gettext();/獲得整個(gè)文本內(nèi)容 int fromindex=displaytext.getcaretposition();/取得當(dāng)前的光標(biāo)位置 int lastfromindex=text.indexof(inputtext.gettext(),fromindex);/獲得查找后的位置 displaytext.setcaretposition(lastfromindex); displaytext.movecaretposition(lastfromindex+inputtext
40、.gettext().length();/使查找到的子字符串顯示出來(lái) ); /添加向后查找菜單項(xiàng) 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
41、 jlabel(要查找的內(nèi)容); jtextfield inputtext=new jtextfield(20); swappanel.add(seeklabel); swappanel.add(inputtext); joptionpane.showmessagedialog(null,swappanel); string text=displaytext.gettext();/獲得整個(gè)文本內(nèi)容 int fromindex=displaytext.getcaretposition();/取得當(dāng)前的光標(biāo)位置 int lastfromindex=text.lastindexof(inputtex
42、t.gettext(),fromindex);/獲得查找后的位置 displaytext.setcaretposition(lastfromindex); displaytext.movecaretposition(lastfromindex+inputtext.gettext().length();/使查找到的子字符串顯示出來(lái) ); bar.add( searchmenu ); /添加 / 設(shè)置“關(guān)于(a).”菜單項(xiàng) jmenuitem aboutitem = new jmenuitem( 關(guān)于(a). ); aboutitem.setmnemonic( a ); helpmenu.add(
43、 aboutitem ); aboutitem.addactionlistener( new actionlistener() public void actionperformed( actionevent event ) joptionpane.showmessagedialog( notepad.this, 文本編輯器nc遼寧工程技術(shù)大學(xué), 關(guān)于, joptionpane.plain_message ); rownumber = displaytext.getrows(); joptionpane.showmessagedialog(null,+ rownumber); ); / 設(shè)置面板顯示文本 dis
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)科護(hù)理循環(huán)+泌尿系統(tǒng)鞏固試題
- 流動(dòng)人口協(xié)管員工作總結(jié)
- 內(nèi)丘縣“醫(yī)院感染管理基層行”活動(dòng)實(shí)施方案
- 2025年四川省愛(ài)眾能源工程有限公司對(duì)外招聘考試筆試試題(含答案)
- 2025年安全生產(chǎn)個(gè)人述職報(bào)告范本(三)
- 體育產(chǎn)業(yè)廠(chǎng)房轉(zhuǎn)租及賽事運(yùn)營(yíng)合同
- 美食廣場(chǎng)餐飲托管服務(wù)合同樣本
- 高速鐵路沿線(xiàn)廠(chǎng)房拆遷補(bǔ)償及搬遷合同
- 車(chē)間租賃及智能化生產(chǎn)系統(tǒng)建設(shè)協(xié)議
- 銀行承兌匯票財(cái)務(wù)擔(dān)保合同賬務(wù)處理規(guī)定
- GB/T 3428-2024架空導(dǎo)線(xiàn)用鍍鋅鋼線(xiàn)
- 中國(guó)特色社會(huì)主義民族發(fā)展理論研究
- 《責(zé)任勝于能力》課件
- GB/T 5465.2-2023電氣設(shè)備用圖形符號(hào)第2部分:圖形符號(hào)
- 廢氣治理設(shè)施運(yùn)行管理規(guī)程制度
- 市政工程質(zhì)量通病防治措施
- 《三國(guó)的世界》解說(shuō)詞 第五集
- 漢字的發(fā)展(英文版介紹)Chinese-character
- 供貨方案及供貨計(jì)劃范文六篇
- 華為“1+X”職業(yè)技能等級(jí)(網(wǎng)絡(luò)系統(tǒng)建設(shè)與運(yùn)維)中級(jí)考試題庫(kù)(含答案)
- 單位財(cái)務(wù)內(nèi)控制度
評(píng)論
0/150
提交評(píng)論