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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

軟件學院課程設計報告書課程名稱設計題目文本編輯器的設計與實現(xiàn)專業(yè)班級XXXXXXXXXXX學號xxxxxxxxxx姓名xxx指導教師2011年11月1設計時間2011年11月2設計目的《面向?qū)ο蟪绦蛟O計》是一門實踐性很強的計算機專業(yè)基礎課程,課程設計是學習完該課程后進行的一次較全面的綜合練習。其目的在于通過實踐加深學生對面向?qū)ο蟪绦蛟O計的理論、方法和基礎知識的理解,掌握使用Java語言進行面向?qū)ο笤O計的基本方法,提高運用面向?qū)ο笾R分析實際問題、解決實際問題的能力,提高學生的應用能力。目前文本編輯器種類很多,所提供的功能也很多,但是能滿足用戶實現(xiàn)多種功能和進行Java的編譯與運行很少,不能更好的適應當前用戶的要求。本設計所完成的文本編輯器功能是針對學習Java程序語言,因此我們利用Java程序設計虛擬機和軟件對用戶及使用者的應用過程形成一整套完整的編寫代碼,編譯,運行。3設計任務文本編輯器的設計與實現(xiàn):設計一個類似于Windows記事本(Notepad)的Java程序。可以打開、新建、保存一個文本文件;對選中的文本進行各種編輯操作(設置字體、字號、字型、對齊方式、背景、前景色、復制、粘貼、剪切、查找、替換等);在文本中能夠插入對象。4設計內(nèi)容4.1需求分析需求分析的任務是確定功能必須完成的工作,也就是對目標系統(tǒng)提出完整、準確、清晰、具體的要求。簡單文本編輯器提供給用戶基本的純文本編輯功能,能夠?qū)⒂脩翡浫氲奈谋敬鎯Φ奖镜卮疟P中。能夠讀取磁盤中現(xiàn)有的純文本文件,以及方便用戶進行需要的編輯功能。文件操作能夠?qū)崿F(xiàn)新建、保存、打開文檔等,編輯操作能過實現(xiàn)文本的剪貼、復制、粘貼等,格式操作能過實現(xiàn)字體設置、背景等,幫助操作能夠?qū)崿F(xiàn)關于主題的查看等功能。4.2概要設計4.2.1程序基本功能概括文本編輯器文本編輯器格式編輯黏貼打開菜單保存新建退出另存為文件剪切黏貼查找復制字體字號插入對象替換圖4.2.1功能架構(gòu)圖4.2.2程序主要組件概括1.基本的Frame框架;2.菜單;3.打開文件對話框;4.保存文件對話框;5.顏色對話框;6.Choice下拉列表,運來實現(xiàn)字體設置;7.簡單的幫助框架。4.3詳細設計4.3.1文件打開與保存文本編輯器的保存和打開功能的實現(xiàn)用文件對話框及輸入輸出流來完成。先建立打開和保存對話框,在publicvoidactionPerformed(ActionEvente)里分別用FileWriter()和FileReader()方法實現(xiàn)保存和打開。filedialog_save=newFileDialog(this,"保存文件對話框",FileDialog.SAVE); filedialog_save.setVisible(false); filedialog_load=newFileDialog(this,"保存文件對話框",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字體,字形,字體大小的設置文本編輯器要實現(xiàn)對字體的設置,選用了GraphicsEnvironment對象調(diào)用String[]getAvailableFontFamilyNames()方法,該方法可以獲取計算機上所有可用的字體名稱,并存放到字符串數(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)//設置字形(常規(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)//設置字體大小 { 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剪切,復制,粘貼設置文本編輯器中關于剪切,復制,粘貼功能的實現(xiàn)選用處理JTextArea的DocumentEvent事件,通過area.cut(),area.copy(),area.paste()方法,點擊“編輯”中相應菜單項可以選擇將文本區(qū)中選中的內(nèi)容剪切,復制,粘貼。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)建格式菜單及其菜單項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();//取得當前的光標位置 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)建,添加幫助菜項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設計成果4.4.1運行界面圖2文本編輯器主界面圖3文本編輯器編輯界面圖4文本編輯器文件界面圖5文本編輯器格式圖6文本編輯器查找界面圖7文本編輯器幫助界面圖8文本編輯器字體名稱界面圖9文本編輯器字體風格界面圖10文本編輯器中幫助中關于對話框圖11查找消息對話框圖12文本編輯器中另存為對話框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"};//定義風格數(shù)組StringfontNames[]={"宋體","華文行楷","隸書"};//字體數(shù)組String[]sizeString=newString[30];//字號數(shù)組int[]size=newint[30];//與字號數(shù)組對應的字號整數(shù),用于設置文字大小privateJRadioButtonMenuItemcolorItems[],fonts[];privateJCheckBoxMenuItemstyleItems[];privateJTextAreadisplayText;//定義文本編輯區(qū)privateButtonGroupfontGroup,colorGroup;//字體組,跟字色組privateintstyle;//字體風格privateJScrollPanescroll;//為文本編輯區(qū)提供滾動條privateStringselectText="";//存放文本編輯區(qū)中選中的文本內(nèi)容privateJComboBoxstyleBox,fontBox,sizeBox;//工具欄privateJPaneltoolPanel;//存放工具欄privateintrowNumber=0;privateFileDialogfd=newFileDialog(this);//setupGUIpublicNotepad(){super("記事本");//創(chuàng)建菜單條JMenuBarbar=newJMenuBar();setJMenuBar(bar)//設置文件菜單及其菜單項JMenufileMenu=newJMenu("文件(F)");fileMenu.setMnemonic('F');//設置新建菜單項 JMenuItemnewItem=newJMenuItem("新建(N)"); newItem.setMnemonic('N'); fileMenu.add(newItem); newItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {displayText.setText(""); }});//設置打開菜單項 JMenuItemopenItem=newJMenuItem("打開(O)"); openItem.setMnemonic('O'); fileMenu.add(openItem); openItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {fd.setTitle("打開");//設置標題 fd.show(); if(fd.getFile()!=null){Filefile=newFile(fd.getFile());//用從fd中取得的文件建立新文件,即打開的文件displayText.setText(""); try{ FileReaderf=newFileReader(file); BufferedReaderb=newBufferedReader(f);//按行讀打開的文件,然后傳入文本域 Strings; try{ while((s=b.readLine())!=null){ displayText.append(s+"\n");//將給定文本追加到文本域的當前文本(即把讀的內(nèi)容加入文本域) } f.close(); b.close(); }catch(IOExceptionex){}}catch(FileNotFoundExceptionex){} else{return;}} });fileMenu.addSeparator();//加分隔線//設置退出菜單項JMenuItemexitItem=newJMenuItem("退出(X)");exitItem.setMnemonic('x');fileMenu.add(exitItem);exitItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){System.exit(0);}});bar.add(fileMenu);//剪切菜單選項JMenuItemcutItem=newJMenuItem("剪切(T)"); cutItem.setMnemonic('T'); editMenu.add(cutItem); cutItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent){ selectText=displayText.getSelectedText();//取得選定的文本 intstart=displayText.getSelectionStart();//選定的文本的開始位置 intend=displayText.getSelectionEnd();//選定的文本的結(jié)束位置 displayText.replaceRange("",start,end);/*用指定替換文本替換指定開始位置與結(jié)束位置之間的文本。 這里指定替換文本為空,即為剪切了文本*/ } });//復制菜單選項JMenuItemcopyItem=newJMenuItem("復制(C)");copyItem.setMnemonic('C');editMenu.add(copyItem);copyItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){selectText=displayText.getSelectedText();//獲得選中的內(nèi)容,并保存在selectText里}});//粘貼的實現(xiàn)JMenuItempasteItem=newJMenuItem("粘貼(P)");pasteItem.setMnemonic('P');editMenu.add(pasteItem);pasteItem.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevent){intposition=displayText.getCaretPosition();//獲得鼠標當前位置displayText.insert(selectText,position);//插入到鼠標當前位置}});editMenu.addSeparator();//加分隔線//替換的實現(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();//獲得整個文本內(nèi)容 StringchangeText=text.replaceFirst(inputText.getText(),changetoText.getText());//獲得替換后的內(nèi)容displayText.setText(changeText); } });//全部替換的實現(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();//獲得整個文本內(nèi)容 StringchangeText=text.replaceAll(inputText.getText(),changetoText.getText());//獲得替換后的內(nèi)容 displayText.setText(changeText); } } );editMenu.addSeparator();//加分隔線//自動換行的功能切換JMenuItemchangeItem=newJMenuItem("自動換行(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)聽器for(intcount=0;count<fonts.length;count++){fonts[count]=newJRadioButtonMenuItem(fontNames[count]);fontMenu.add(fonts[count]);fontGroup.add(fonts[count]);fonts[count].addActionListener(itemHandler);}//默認字體fonts[0].setSelected(true);fontMenu.addSeparator();//創(chuàng)建查找菜單 JMenusearchMenu=newJMenu("查找(S)"); searchMenu.setMnemonic('H');//添加向前查找菜單項 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();//獲得整個文本內(nèi)容 intfromIndex=displayText.getCaretPosition();//取得當前的光標位置intlastfromIndex=text.indexOf(inputText.getText(),fromIndex);//獲得查找后的位置displayText.setCaretPosition(lastfromIndex);displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串顯示出來}});//添加向后查找菜單項 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();//獲得整個文本內(nèi)容 intfromIndex=displayText.getCaretPosition();//取得當前的光標位置intlastfromIndex=text.lastIndexOf(inputText.getText(),fromIndex);//獲得查找后的位置displayText.setCaretPosition(lastfromIndex);displayText.moveCaretPosition(lastfromIndex+inputText.getText().length());//使查找到的子字符串顯示出來} });bar.add(searchMenu);//添加//設置“關于(A)...”菜單項 JMenuItemaboutItem=newJMenuItem("關于(A)..."); aboutItem.setMnemonic('A'); helpMenu.add(aboutItem); aboutItem.addActionListener( newActionListener(){ publicvoidactionPerformed(ActionEventevent) {JOptionPane.sh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論