文本編輯器的設(shè)計(jì)實(shí)現(xiàn)分析_第1頁(yè)
文本編輯器的設(shè)計(jì)實(shí)現(xiàn)分析_第2頁(yè)
文本編輯器的設(shè)計(jì)實(shí)現(xiàn)分析_第3頁(yè)
文本編輯器的設(shè)計(jì)實(shí)現(xiàn)分析_第4頁(yè)
文本編輯器的設(shè)計(jì)實(shí)現(xiàn)分析_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件學(xué)院課程設(shè)計(jì)報(bào)告書(shū)課程名稱設(shè)計(jì)題目文本編輯器的設(shè)計(jì)與實(shí)現(xià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ì)》是一門實(shí)踐性很強(qiáng)的計(jì)算機(jī)專業(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)用能力。目前文本編輯器種類很多,所提供的功能也很多,但是能滿足用戶實(shí)現(xiàn)多種功能和進(jìn)行Java的編譯與運(yùn)行很少,不能更好的適應(yīng)當(dāng)前用戶的要求。本設(shè)計(jì)所完成的文本編輯器功能是針對(duì)學(xué)習(xí)Java程序語(yǔ)言,因此我們利用Java程序設(shè)計(jì)虛擬機(jī)和軟件對(duì)用戶及使用者的應(yīng)用過(guò)程形成一整套完整的編寫(xiě)代碼,編譯,運(yùn)行。3設(shè)計(jì)任務(wù)文本編輯器的設(shè)計(jì)與實(shí)現(xiàn):設(shè)計(jì)一個(gè)類似于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)確、清晰、具體的要求。簡(jiǎn)單文本編輯器提供給用戶基本的純文本編輯功能,能夠?qū)⒂脩翡浫氲奈谋敬鎯?chǔ)到本地磁盤中。能夠讀取磁盤中現(xiàn)有的純文本文件,以及方便用戶進(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ì)話框;4.保存文件對(duì)話框;5.顏色對(duì)話框;6.Choice下拉列表,運(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ì)話框及輸入輸出流來(lái)完成。先建立打開(kāi)和保存對(duì)話框,在publicvoidactionPerformed(ActionEvente)里分別用FileWriter()和FileReader()方法實(shí)現(xiàn)保存和打開(kāi)。filedialog_save=newFileDialog(this,"保存文件對(duì)話框",FileDialog.SAVE); filedialog_save.setVisible(false); filedialog_load=newFileDialog(this,"保存文件對(duì)話框",FileDialog.LOAD); filedialog_load.setVisible(false); filedialog_save.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) { filedialog_save.setVisible(false); } }); filedialog_load.addWindowListener(newWindowAdapter() { publicvoidwindowClosing(WindowEvente) { filedialog_load.setVisible(false); } });publicvoidactionPerformed(ActionEvente) { if(e.getSource()==itemSave) { filedialog_save.setVisible(true); if(filedialog_save.getFile()!=null) { try{Filefile=new File(filedialog_save.getDirectory(), filedialog_save.getFile()); tofile=newFileWriter(file); out=newBufferedWriter(tofile); out.write(area.getText(),0,(area.getText()).length()); out.close(); tofile.close(); } catch(IOExceptione1){} } } elseif(e.getSource()==itemLoad) { filedialog_load.setVisible(true); area.setText(null); Strings; if(filedialog_load.getFile()!=null) { try{Filefile=new File(filedialog_load.getDirectory(), filedialog_load.getFile()); file_reader=newFileReader(file); in=newBufferedReader(file_reader); while((s=in.readLine())!=null) area.append(s+'\n'); in.close(); file_reader.close(); } catch(IOExceptione1){} } }4.3.2字體,字形,字體大小的設(shè)置文本編輯器要實(shí)現(xiàn)對(duì)字體的設(shè)置,選用了GraphicsEnvironment對(duì)象調(diào)用String[]getAvailableFontFamilyNames()方法,該方法可以獲取計(jì)算機(jī)上所有可用的字體名稱,并存放到字符串?dāng)?shù)組中。Choicelist;GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();StringfontName[]=ge.getAvailableFontFamilyNames();publicvoiditemStateChanged(ItemEvente) { Stringname=list.getSelectedItem();Fontf=newFont(name,Font.PLAIN,15); area.setFont(f); }elseif(e.getSource()==item8)//設(shè)置字形(常規(guī),傾斜,加粗) { Fontfont=area.getFont();intstyle=font.getStyle(); style=style^0;area.setFont(newFont("",style,font.getSize())); } elseif(e.getSource()==item9) { Fontfont=area.getFont();intstyle=font.getStyle(); style=style^2;area.setFont(newFont("",style,font.getSize())); } elseif(e.getSource()==item10) { Fontfont=area.getFont(); intstyle=font.getStyle(); style=style^1;area.setFont(newFont("",style,font.getSize())); } elseif(e.getSource()==item11)//設(shè)置字體大小 { Fontfont=area.getFont(); intstyle=font.getStyle(); area.setFont(newFont(font.getName(),style,12)); } elseif(e.getSource()==item12) { Fontfont=area.getFont(); intstyle=font.getStyle(); area.setFont(newFont(font.getName(),style,24)); } elseif(e.getSource()==item13) { Fontfont=area.getFont(); intstyle=font.getStyle(); area.setFont(newFont(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)擊“編輯”中相應(yīng)菜單項(xiàng)可以選擇將文本區(qū)中選中的內(nèi)容剪切,復(fù)制,粘貼。publicvoidchangedUpdate(DocumentEvente) { Strings=area.getText(); } publicvoidremoveUpdate(DocumentEvente) { changedUpdate(e); } publicvoidinsertUpdate(DocumentEvente) { changedUpdate(e); }publicvoidactionPerformed(ActionEvente) {elseif(e.getSource()==item2) { area.cut(); } elseif(e.getSource()==item3) { area.copy(); } elseif(e.getSource()==item4) { area.paste(); }}4.3.4插入子菜單,刪除子菜單,創(chuàng)建格式菜單及其菜單項(xiàng)JMenuIteminsertItem=newJMenuItem("插入文本(K)"); insertItem.setMnemonic('K'); editMenu.add(insertItem); insertItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent){ JPanelinsertPanel=newJPanel(); JLabelinsertLabel=newJLabel("要插入的內(nèi)容"); JTextFieldinputText=newJTextField(10); insertPanel.add(insertLabel); insertPanel.add(inputText); JOptionPane.showMessageDialog(null,insertPanel); intfromIndex=displayText.getCaretPosition();//取得當(dāng)前的光標(biāo)位置 displayText.insert(inputText.getText(),fromIndex); } } );JMenuItemRemoveItem=newJMenuItem("刪除(G)"); RemoveItem.setMnemonic('G'); editMenu.add(RemoveItem); RemoveItem.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEvente) {intstart=displayText.getSelectionStart(); intend=displayText.getSelectionEnd(); displayText.replaceRange(null,start,end); } });editMenu.addSeparator();bar.add(editMenu);//addeditMenuJMenuformatMenu=newJMenu("格式(R)");formatMenu.setMnemonic('R');4.3.5創(chuàng)建,添加幫助菜項(xiàng)JMenuhelpMenu=newJMenu("幫助(H)");helpMenu.setMnemonic('H');JMenuItemhelpItem=newJMenuItem("幫助主題(H)...");helpItem.setMnemonic('H');helpMenu.add(helpItem);helpItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){JTextAreahelpText=newJTextArea(JScrollPanescroller=newJScrollPane(helpText);JOptionPane.showMessageDialog(null,scroller);}});bar.add(helpMenu);//添加4.4設(shè)計(jì)成果4.4.1運(yùn)行界面圖2文本編輯器主界面圖3文本編輯器編輯界面圖4文本編輯器文件界面圖5文本編輯器格式圖6文本編輯器查找界面圖7文本編輯器幫助界面圖8文本編輯器字體名稱界面圖9文本編輯器字體風(fēng)格界面圖10文本編輯器中幫助中關(guān)于對(duì)話框圖11查找消息對(duì)話框圖12文本編輯器中另存為對(duì)話框4.4.2主要代碼importjava.awt.*;importjava.awt.event.*;importjava.awt.datatransfer.*;importjavax.swing.*;importjava.io.*;importjava.lang.*;publicclassNotepadextendsJFrame{privatefinalColorcolorvalues[]={Color.black,Color.blue,Color.red,Color.green};//定義顏色數(shù)組StringstyleNames[]={"Bold","Italic"};//定義風(fēng)格數(shù)組StringfontNames[]={"宋體","華文行楷","隸書(shū)"};//字體數(shù)組String[]sizeString=newString[30];//字號(hào)數(shù)組int[]size=newint[30];//與字號(hào)數(shù)組對(duì)應(yīng)的字號(hào)整數(shù),用于設(shè)置文字大小privateJRadioButtonMenuItemcolorItems[],fonts[];privateJCheckBoxMenuItemstyleItems[];privateJTextAreadisplayText;//定義文本編輯區(qū)privateButtonGroupfontGroup,colorGroup;//字體組,跟字色組privateintstyle;//字體風(fēng)格privateJScrollPanescroll;//為文本編輯區(qū)提供滾動(dòng)條privateStringselectText="";//存放文本編輯區(qū)中選中的文本內(nèi)容privateJComboBoxstyleBox,fontBox,sizeBox;//工具欄privateJPaneltoolPanel;//存放工具欄privateintrowNumber=0;privateFileDialogfd=newFileDialog(this);//setupGUIpublicNotepad(){super("記事本");//創(chuàng)建菜單條JMenuBarbar=newJMenuBar();setJMenuBar(bar)//設(shè)置文件菜單及其菜單項(xiàng)JMenufileMenu=newJMenu("文件(F)");fileMenu.setMnemonic('F');//設(shè)置新建菜單項(xiàng) JMenuItemnewItem=newJMenuItem("新建(N)"); newItem.setMnemonic('N'); fileMenu.add(newItem); newItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {displayText.setText(""); }});//設(shè)置打開(kāi)菜單項(xiàng) JMenuItemopenItem=newJMenuItem("打開(kāi)(O)"); openItem.setMnemonic('O'); fileMenu.add(openItem); openItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {fd.setTitle("打開(kāi)");//設(shè)置標(biāo)題 fd.show(); if(fd.getFile()!=null){Filefile=newFile(fd.getFile());//用從fd中取得的文件建立新文件,即打開(kāi)的文件displayText.setText(""); try{ FileReaderf=newFileReader(file); BufferedReaderb=newBufferedReader(f);//按行讀打開(kāi)的文件,然后傳入文本域 Strings; try{ while((s=b.readLine())!=null){ displayText.append(s+"\n");//將給定文本追加到文本域的當(dāng)前文本(即把讀的內(nèi)容加入文本域) } f.close(); b.close(); }catch(IOExceptionex){}}catch(FileNotFoundExceptionex){} else{return;}} });fileMenu.addSeparator();//加分隔線//設(shè)置退出菜單項(xiàng)JMenuItemexitItem=newJMenuItem("退出(X)");exitItem.setMnemonic('x');fileMenu.add(exitItem);exitItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){System.exit(0);}});bar.add(fileMenu);//剪切菜單選項(xiàng)JMenuItemcutItem=newJMenuItem("剪切(T)"); cutItem.setMnemonic('T'); editMenu.add(cutItem); cutItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent){ selectText=displayText.getSelectedText();//取得選定的文本 intstart=displayText.getSelectionStart();//選定的文本的開(kāi)始位置 intend=displayText.getSelectionEnd();//選定的文本的結(jié)束位置 displayText.replaceRange("",start,end);/*用指定替換文本替換指定開(kāi)始位置與結(jié)束位置之間的文本。 這里指定替換文本為空,即為剪切了文本*/ } });//復(fù)制菜單選項(xiàng)JMenuItemcopyItem=newJMenuItem("復(fù)制(C)");copyItem.setMnemonic('C');editMenu.add(copyItem);copyItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){selectText=displayText.getSelectedText();//獲得選中的內(nèi)容,并保存在selectText里}});//粘貼的實(shí)現(xiàn)JMenuItempasteItem=newJMenuItem("粘貼(P)");pasteItem.setMnemonic('P');editMenu.add(pasteItem);pasteItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){intposition=displayText.getCaretPosition();//獲得鼠標(biāo)當(dāng)前位置displayText.insert(selectText,position);//插入到鼠標(biāo)當(dāng)前位置}});editMenu.addSeparator();//加分隔線//替換的實(shí)現(xiàn) JMenuItemswapItem=newJMenuItem("替換(R))"); swapItem.setMnemonic('R'); editMenu.add(swapItem); swapItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent){ JPanelswapPanel=newJPanel(); JLabellookupLabel=newJLabel("要替換的內(nèi)容"); JTextFieldinputText=newJTextField(10); JLabelswapLabel=newJLabel("替換為:"); JTextFieldchangetoText=newJTextField(10); swapPanel.add(lookupLabel); swapPanel.add(inputText); swapPanel.add(swapLabel); swapPanel.add(changetoText); JOptionPane.showMessageDialog(null,swapPanel); Stringtext=displayText.getText();//獲得整個(gè)文本內(nèi)容 StringchangeText=text.replaceFirst(inputText.getText(),changetoText.getText());//獲得替換后的內(nèi)容displayText.setText(changeText); } });//全部替換的實(shí)現(xiàn) JMenuItemaswapItem=newJMenuItem("全部替換(Q))"); aswapItem.setMnemonic('Q'); editMenu.add(aswapItem); aswapItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent){ JPanelswapPanel=newJPanel(); JLabellookupLabel=newJLabel("要替換的內(nèi)容"); JTextFieldinputText=newJTextField(10); JLabelswapLabel=newJLabel("替換為:"); JTextFieldchangetoText=newJTextField(10); swapPanel.add(lookupLabel); swapPanel.add(inputText); swapPanel.add(swapLabel); swapPanel.add(changetoText); JOptionPane.showMessageDialog(null,swapPanel); Stringtext=displayText.getText();//獲得整個(gè)文本內(nèi)容 StringchangeText=text.replaceAll(inputText.getText(),changetoText.getText());//獲得替換后的內(nèi)容 displayText.setText(changeText); } } );editMenu.addSeparator();//加分隔線//自動(dòng)換行的功能切換JMenuItemchangeItem=newJMenuItem("自動(dòng)換行(W)");changeItem.setMnemonic('W');formatMenu.add(changeItem);changeItem.addActionListener(newActionListener(){booleanvar=false;publicvoidactionPerformed(ActionEventevent){if(var)var=false;elsevar=true;displayText.setLineWrap(var);}});//創(chuàng)建字體按鈕監(jiān)聽(tīng)器for(intcount=0;count<fonts.length;count++){fonts[count]=newJRadioButtonMenuItem(fontNames[count]);fontMenu.add(fonts[count]);fontGroup.add(fonts[count]);fonts[count].addActionListener(itemHandler);}//默認(rèn)字體fonts[0].setSelected(true);fontMenu.addSeparator();//創(chuàng)建查找菜單 JMenusearchMenu=newJMenu("查找(S)"); searchMenu.setMnemonic('H');//添加向前查找菜單項(xiàng) JMenuItemfrontItem=newJMenuItem("向前查找(F)"); frontItem.setMnemonic('F'); searchMenu.add(frontItem); frontItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {JPanelswapPanel=newJPanel(); JLabelseekLabel=newJLabel("要查找的內(nèi)容"); JTextFieldinputText=newJTextField(20); swapPanel.add(seekLabel); swapPanel.add(inputText); JOptionPane.showMessageDialog(null,swapPanel); Stringtext=displayText.getText();//獲得整個(gè)文本內(nèi)容 intfromIndex=displayText.getCaretPosition();//取得當(dāng)前的光標(biāo)位置intlastfromIndex=text.indexOf(inputText.getText(),fromIndex);//獲得查找后的位置displayText.setCaretPosition(lastfromIndex);displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串顯示出來(lái)}});//添加向后查找菜單項(xiàng) JMenuItembackItem=newJMenuItem("向后查找(B)"); backItem.setMnemonic('B'); searchMenu.add(backItem); backItem.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventevent) {JPanelswapPanel=newJPanel(); JLabelseekLabel=newJLabel("要查找的內(nèi)容"); JTextFieldinputText=newJTextField(20); swapPanel.add(seekLabel); swapPanel.add(inputText); JOptionPane.showMessageDialog(null,swapPanel); Stringtext=displayText.getText();//獲得整個(gè)文本內(nèi)容 intfromIndex=displayText.getCaretPosition();//取得當(dāng)前的光標(biāo)位置intlastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);//獲得查找后的位置displayText.setCaretPosition(lastfromIndex);displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串顯示出來(lái)} });bar.add(searchMenu);//添加//設(shè)置“關(guān)于(A)...”菜單項(xiàng) JMenuItemaboutItem=newJMenuItem("關(guān)于(A)..."); aboutItem.setMnemonic('A'); helpMenu.add(aboutItem); aboutItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {JOptionPane.sh

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論