版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章課題概述仿照Window系統(tǒng)中的“記事本”利用Java的GUI和文件輸入輸出流實現(xiàn)一個簡單的記事本程序。要求能實現(xiàn)編輯、保存、另存為、查找和替換等功能。1.1課題的目的記事本是當代計算機操作系統(tǒng)當中功能最強大的工具之一,用戶不僅可以用它記錄生活和工作上的事,還可以用它來編寫程序。如今我想運用自己學的java知識來編寫一個記事本程序,同時可以利用Java的跨平臺性,以達到多個平臺兼容運行的目的。1.2課題的要求1.2.1界面要求:(1)程序運行時,上方應(yīng)顯示記事本三個字,程序中還需顯示文件和編輯兩個菜單供用戶選擇。程序窗口可以自由地被用戶拉伸,大小也可以改變。(2)用戶可以看到自己在文本框內(nèi)隨意編輯的文字內(nèi)容。(3)用戶在點擊文件和編輯兩個菜單時可以看到二級菜單選項。文件菜單中可看到新建、打開、保存、另存為,編輯菜單中可看到查找、替換。1.2.2程序功能要求:(1)用戶可以通過點擊新建來開啟一個新的輸入文本區(qū),并能提醒用戶保存上一個編輯的文本。(2)用戶在本程序編輯的文本可以做到與Windows中的記事本在換行方面相兼容。(3)可以查找出文本內(nèi)用戶規(guī)定的查找對象,并進行替換。1.3設(shè)備與環(huán)境硬件:多媒體計算機。軟件:java集成開發(fā)環(huán)境、操作系統(tǒng)。 第2章概要設(shè)計2.1整個程序的模塊結(jié)構(gòu)運行程序首先可以看到文件和和編輯兩個菜單選項。點擊文件可以看到新建、打開、保存和另存為這四個選項。而點擊編輯則會看到查找和替換兩個選項。整個程序的模塊圖2-1所示。圖2-1整個程序的模塊2.2各個功能的描述2.2.1新建功能用戶可以編輯完一個文本后,建一個新的文本,還能提醒用戶保存前一個編輯過的文本,一定程度上可以減少用戶誤刪文檔的幾率。2.2.2打開功能打開功能可以讓用戶在電腦中找到并打開之前編輯過的文本,會彈出文件對話框,用戶選擇路徑找到目標文件,可進行后續(xù)編輯操作。2.2.3保存功能需要判斷用戶是否是首次保存文本。如果是首次編輯,保存時需選擇存儲路徑。如果是打開并修改已編輯過的文本,此時保存,則會和打開的路徑一致,不會有任何對話框彈出。2.2.4另存為功能另存為功能是讓用戶選擇新的存儲路徑,與第一次保存相同,只要觸發(fā)這個功能,保存時都會彈出文件對話框,要求用戶需選擇存儲路徑。2.2.5查找功能查找功能是本課程設(shè)計的難點,能找出在查找區(qū)域內(nèi)規(guī)定的內(nèi)容。參照Windows下的記事本,需要增加查找方向,區(qū)分大小寫。進行一次具體的查找流程請見圖2-2。圖2-2進行一次查找的具體流程2.2.6替換功能替換功能是基于查找功能,此外還多增加的一個能夠替換原文本編輯區(qū)域中選定內(nèi)容的功能??梢詭椭脩舴奖愕馗鼡Q內(nèi)容。第3章程序功能的實現(xiàn)3.1主窗口的實現(xiàn)在程序中調(diào)用JFrame、JMenu、JMenuItem等給程序添加窗口、菜單、菜單選項和實現(xiàn)某些功能需彈出的對話框。實現(xiàn)主窗口的代碼如下:finalJFramejf=newJFrame("記事本"); JMenuBarjmb=newJMenuBar(); JMenujm1=newJMenu("文件"); JMenujm2=newJMenu("編輯"); jta=newJTextArea(); JMenuItemjit11=newJMenuItem("新建");JMenuItemjit12=newJMenuItem("打開");JMenuItemjit13=newJMenuItem("保存");JMenuItemjit14=newJMenuItem("另存為");JMenuItemjit21=newJMenuItem("查找");JMenuItemjit22=newJMenuItem("替換");……//功能代碼省略。jm1.add(jit11); jm1.add(jit12); jm1.add(jit13); jm1.add(jit14); jm2.add(jit21); jm2.add(jit22); jmb.add(jm1); jmb.add(jm2); jf.add(jta); jf.setJMenuBar(jmb); jf.setSize(500,500); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//關(guān)閉窗口。 }}3.2各個功能的實現(xiàn)3.2.1新建的實現(xiàn)實現(xiàn)簡單新建功能只要將文本框內(nèi)容設(shè)置為空即可,但是要判斷上一個文本是否改動?如果改動,需提示用戶保存,并套用第一次保存的方法。新建的代碼實現(xiàn)如下:jit11.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr2=jta.getText(); if(str1.equals(str2)){//文本是否改變? jta.setText(""); }else{//提醒用戶保存上個文本。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"請選擇保存路徑",FileDialog.SAVE); fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName; try{……}//此處省略,方法與保存功能相同,只需將寫入對象由str1改為str2即可。catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); }J jta.setText(""); } } });3.2.2打開的實現(xiàn)實現(xiàn)打開功能,首先需要彈出文件對話框,并且設(shè)置為可見,讓用戶選擇.txt文件。先定義一個字節(jié)流b,將已經(jīng)讀寫進來文本的字節(jié)流通過循環(huán)傳給b,將讀出來的東西返回給int型的temp。當讀取結(jié)束,將所有數(shù)組的值以字符串的形式傳給給str,并顯示。打開的代碼實現(xiàn)如下:jit12.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JFramejf1=newJFrame();FileDialogfd=newFileDialog(jf1,"打開",FileDialog.LOAD);//打開框。 fd.setVisible(true); StringfilefPath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filefPath+fileName;//獲取絕對路徑。 try{ FileInputStreamfis=newFileInputStream(filepath); byte[]b=newbyte[1024];//定義字節(jié)流 Stringstr=""; while(true){ inttemp=fis.read(b); if(temp==-1){//文件已讀完 break;//跳出循環(huán) } str+=newString(b,0,temp);//將字節(jié)存儲的內(nèi)容以字符串形式傳給str。 } str1=str; jta.setText(str); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });3.2.3保存的實現(xiàn)實現(xiàn)保存功能,需要考慮考慮兩種情況:用ifelse語句判斷用戶是否是第一次編輯,如果用戶是第一次編輯文本時,需要彈出文件對話框,讓用戶選擇保存路徑。如果是先打開曾經(jīng)編輯過的文檔,則路徑是和打開的路徑一致。保存時先建立一個緩存區(qū),將文檔轉(zhuǎn)成字符數(shù)組的形式后,查找換行符,一旦查找到換行符,便記錄到下一行,以便兼容Windows的原生記事本,最后寫入電腦。保存的代碼實現(xiàn)如下:jit13.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); if(filepath==null){//判斷路徑是否為空。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"保存",FileDialog.SAVE);//彈出保存對話框。 fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName;//獲取絕對路徑。 } try{ FileWriterfw=newFileWriter(filepath+".txt"); BufferedWriterbw=newBufferedWriter(fw); char[]ch=str1.toCharArray(); for(inti=0;i<=ch.length-1;i++){ if(ch[i]=='\n')//如果遇見換行符則開啟新的一行。{bw.newLine(); continue; } bw.write(ch[i]);//寫入電腦。 } bw.flush(); bw.close(); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } }});3.2.4另存為的實現(xiàn)實現(xiàn)另存為功能,和保存功能類似,但不需要考慮用戶是否是第一次編輯,一直讓用戶選擇保存路徑。保存時先建立一個緩存區(qū),將文檔以字符數(shù)組的形式,查找其中的換行符,一旦查找到換行符,便記錄到下一行,以便兼容Windows的原生記事本。然后寫入電腦。另存為的主要代碼實現(xiàn)如下:jit14.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); JFramejf2=newJFrame();//不需要判斷絕對路徑是否存在。 FileDialogfd=newFileDialog(jf2,"另存為",FileDialog.SAVE); fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); try{……}//內(nèi)容與保存一樣 catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });3.2.5查找的實現(xiàn)實現(xiàn)查找功能,需彈出以Windows記事本為原型,布局好的查找對話框。在對話框中設(shè)置查找內(nèi)容輸入?yún)^(qū),區(qū)分大小寫選項及方向選項。在方向選項中向上和向下只能選擇一個。實行查找時,獲取光標位置,將文本區(qū)內(nèi)容和查找輸入框的內(nèi)容均轉(zhuǎn)成字符串形式。在文本內(nèi)容字符串中根據(jù)用戶選擇方向及光標位置來規(guī)定相應(yīng)的搜索范圍,查找目標字符串,并顯示出來。如果沒選區(qū)分大小寫,則需將兩個字符串的大寫內(nèi)容調(diào)用toLowerCase()方法轉(zhuǎn)成小寫,再進行搜索。查找的主要代碼實現(xiàn)如下:jit21.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jrb1.addActionListener(newActionListener()//方向唯一{ publicvoidactionPerformed(ActionEvente){ jrb2.setSelected(false); } }); jrb2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jrb1.setSelected(false); } }); jrb1.setSelected(true); jbc.addActionListener(newActionListener(){//編寫查找。 publicvoidactionPerformed(ActionEvente){ intloc=jta.getCaretPosition(); Stringsc=jtf.getText();//將輸入框的內(nèi)容轉(zhuǎn)成字符串。 if(jrb1.isSelected()){//向上查找。 if(jcb.isSelected()){//區(qū)分大小寫。 Strings=jta.getText();//文本內(nèi)容轉(zhuǎn)成字符串。 System.out.println(s); Strings1=s.substring(0,loc-u);//設(shè)置查找范圍。 if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.lastIndexOf(sc),//顯示出的內(nèi)容 s1.lastIndexOf(sc)+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//顯示找不到。 } u=sc.length(); }else{//不區(qū)分大小寫。 Strings=jta.getText(); System.out.println(s); s=s.toLowerCase(); sc=sc.toLowerCase(); Strings1=s.substring(0,loc-u); if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.lastIndexOf(sc),//顯示找出的內(nèi)容。 s1.lastIndexOf(sc)+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//顯示找不到。 } u=sc.length(); } } if(jrb2.isSelected()){//向下查找。 if(jcb.isSelected()){ Strings=jta.getText(); Strings1=s.substring(loc); if(s1.lastIndexOf(sc)!=-1){//顯示找出的內(nèi)容。 jta.select(s1.indexOf(sc)+loc, s1.indexOf(sc)+loc+sc.length()); }else{ JOptionPane.showMessageDialog(null,"找不到"+"“"+jtf.getText()+"”");//顯示找不到。 } }else{ Strings=jta.getText(); s=s.toLowerCase(); sc=sc.toLowerCase(); Strings1=s.substring(loc); if(s1.lastIndexOf(sc)!=-1){ jta.select(s1.indexOf(sc)+loc, s1.indexOf(sc)+loc+sc.length());//顯示找出的內(nèi)容。 }else{ JOptionPane.showMessageDialog(null,"找不到""“"+jtf.getText()+"”");//顯示找不到。 } } } } }); JButtonjb2=newJButton("取消"); jb2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jfc.setVisible(false); } }); });3.2.6替換的實現(xiàn)實現(xiàn)替換功能,只需在查找的基礎(chǔ)之上在替換對話框中添加替換內(nèi)容輸入?yún)^(qū)。在查找功能的下方,添加替換內(nèi)容輸入?yún)^(qū),并在查找過程后將用戶輸入的替換內(nèi)容用replaceSelected方法替換到原文本。替換功能的主要部分的代碼實現(xiàn)如下:jbc1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jta.replaceSelection(jtf1.getText()); } ……//其余功能與查找相同 }); 第4章調(diào)試及發(fā)現(xiàn)問題的解決在編程的過程中難免會遇到功能上的缺失及漏洞,通過這一次課程設(shè)計,我感覺對我來說以下三個是印象最深刻的問題:1、如何使這個記事本所編輯的內(nèi)容在換行輸入時能夠與Windows下的記事本兼容顯示?解決方法:在老師的提醒下和保存時先建立一個緩存區(qū),將文檔以字符數(shù)組的形式,運用循環(huán)查找換行符,一旦查找到換行符,便用.newLine()方法便記錄到下一行,再次循環(huán)找到下一個換行符,也記錄到下一行,這樣即可與Windows的記事本兼容。2、在測試時發(fā)現(xiàn)新建文本時沒有自動判斷用戶之前文本是否做過改動。解決方法:判斷是否修改過上一個文本其實無非就兩種情況,第一種是在空文本中直接編輯,第二種是在打開某一文件后再進行編輯。經(jīng)過思考和與同學的探討后,在外部建一個靜態(tài)字符串str1,設(shè)為空值。將打開功能里的值也放在str1中。之后在新建里建一個字符串str2,將文本區(qū)當前內(nèi)容以字符串形式傳給str2。這時判斷str1與str2是否相同?如果不同,則前文本發(fā)生改動,彈出文件對話框,提示保存上一個文本str2。3、在查找時發(fā)現(xiàn)只能查到離光標最近對的那一個,不能實現(xiàn)查找全部對象。解決方法:經(jīng)過多次測試發(fā)現(xiàn)substring區(qū)間開閉問題導致查找范圍出現(xiàn)了差錯,使程序光標一直停留在原始位置。于是我開始考慮光標位置是否需要減去查找內(nèi)容的字符串長度,經(jīng)過一番試驗我發(fā)現(xiàn)向上查找光標位置需要減去查找內(nèi)容的字符串,而向下查找時不需要。第5章程序測試及分析打開記事本顯示的是文件編輯兩個菜單欄,和文本輸入?yún)^(qū),可以在文本區(qū)輸入任意內(nèi)容。在文本區(qū)輸入本人班級、姓名及學號。如圖5-1所示,是對編輯的測試。圖5-1對編輯功能的測試在編輯過的文本區(qū)內(nèi),點擊文件菜單內(nèi)的新建則可新建一個空的文檔,如果對上一個文本進行修改則會提示保存。如圖5-2所示,是對新建的測試。圖5-2對新建功能的測試點擊打開,則會跳出文件選擇對話框。如圖5-3所示是對打開的測試。圖5-3對打開功能的測試在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院護工保密協(xié)議書范本(3篇)
- 舞蹈新生班主題課程設(shè)計
- 藝術(shù)與設(shè)計課程設(shè)計案例
- 自然探索團隊課程設(shè)計
- 簡易課程設(shè)計
- 英語詞匯班課程設(shè)計
- 正太分布課程設(shè)計
- 綠色蟈蟈課程設(shè)計
- 財務(wù)制度匯編
- 《刑罰的體系與種類》課件
- 英雄之旅思維模型
- 解一元二次方程(公式法)(教學設(shè)計)-九年級數(shù)學上冊同步備課系列
- 冬季傳染病預(yù)防-(課件)-小學主題班會課件
- 2024年秋新滬教牛津版英語三年級上冊 Unit 6 第1課時 教學課件
- 江蘇揚州中學教育集團2023-2024學年中考三模數(shù)學試題含解析
- 2025年統(tǒng)編版高考歷史一輪復(fù)習:北洋軍閥統(tǒng)治時期的政治、經(jīng)濟與文化 講義
- 電影放映設(shè)備日常維護保養(yǎng)規(guī)程
- TSHZSAQS 00255-2024 食葵病蟲害防治技術(shù)規(guī)范
- 食材配送消防安全應(yīng)急預(yù)案
- 《供應(yīng)鏈管理》期末考試復(fù)習題庫(含答案)
- 招標文件范本江蘇版
評論
0/150
提交評論