版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章課題概述仿照Window系統(tǒng)中的“記事本”利用Java的GUI和文件輸入輸出流實(shí)現(xiàn)一個(gè)簡(jiǎn)單的記事本程序。要求能實(shí)現(xiàn)編輯、保存、另存為、查找和替換等功能。1.1課題的目的記事本是當(dāng)代計(jì)算機(jī)操作系統(tǒng)當(dāng)中功能最強(qiáng)大的工具之一,用戶不僅可以用它記錄生活和工作上的事,還可以用它來(lái)編寫程序。如今我想運(yùn)用自己學(xué)的java知識(shí)來(lái)編寫一個(gè)記事本程序,同時(shí)可以利用Java的跨平臺(tái)性,以達(dá)到多個(gè)平臺(tái)兼容運(yùn)行的目的。1.2課題的要求1.2.1界面要求:(1)程序運(yùn)行時(shí),上方應(yīng)顯示記事本三個(gè)字,程序中還需顯示文件和編輯兩個(gè)菜單供用戶選擇。程序窗口可以自由地被用戶拉伸,大小也可以改變。(2)用戶可以看到自己在文本框內(nèi)隨意編輯的文字內(nèi)容。(3)用戶在點(diǎn)擊文件和編輯兩個(gè)菜單時(shí)可以看到二級(jí)菜單選項(xiàng)。文件菜單中可看到新建、打開(kāi)、保存、另存為,編輯菜單中可看到查找、替換。1.2.2程序功能要求:(1)用戶可以通過(guò)點(diǎn)擊新建來(lái)開(kāi)啟一個(gè)新的輸入文本區(qū),并能提醒用戶保存上一個(gè)編輯的文本。(2)用戶在本程序編輯的文本可以做到與Windows中的記事本在換行方面相兼容。(3)可以查找出文本內(nèi)用戶規(guī)定的查找對(duì)象,并進(jìn)行替換。1.3設(shè)備與環(huán)境硬件:多媒體計(jì)算機(jī)。軟件:java集成開(kāi)發(fā)環(huán)境、操作系統(tǒng)。 第2章概要設(shè)計(jì)2.1整個(gè)程序的模塊結(jié)構(gòu)運(yùn)行程序首先可以看到文件和和編輯兩個(gè)菜單選項(xiàng)。點(diǎn)擊文件可以看到新建、打開(kāi)、保存和另存為這四個(gè)選項(xiàng)。而點(diǎn)擊編輯則會(huì)看到查找和替換兩個(gè)選項(xiàng)。整個(gè)程序的模塊圖2-1所示。圖2-1整個(gè)程序的模塊2.2各個(gè)功能的描述2.2.1新建功能用戶可以編輯完一個(gè)文本后,建一個(gè)新的文本,還能提醒用戶保存前一個(gè)編輯過(guò)的文本,一定程度上可以減少用戶誤刪文檔的幾率。2.2.2打開(kāi)功能打開(kāi)功能可以讓用戶在電腦中找到并打開(kāi)之前編輯過(guò)的文本,會(huì)彈出文件對(duì)話框,用戶選擇路徑找到目標(biāo)文件,可進(jìn)行后續(xù)編輯操作。2.2.3保存功能需要判斷用戶是否是首次保存文本。如果是首次編輯,保存時(shí)需選擇存儲(chǔ)路徑。如果是打開(kāi)并修改已編輯過(guò)的文本,此時(shí)保存,則會(huì)和打開(kāi)的路徑一致,不會(huì)有任何對(duì)話框彈出。2.2.4另存為功能另存為功能是讓用戶選擇新的存儲(chǔ)路徑,與第一次保存相同,只要觸發(fā)這個(gè)功能,保存時(shí)都會(huì)彈出文件對(duì)話框,要求用戶需選擇存儲(chǔ)路徑。2.2.5查找功能查找功能是本課程設(shè)計(jì)的難點(diǎn),能找出在查找區(qū)域內(nèi)規(guī)定的內(nèi)容。參照Windows下的記事本,需要增加查找方向,區(qū)分大小寫。進(jìn)行一次具體的查找流程請(qǐng)見(jiàn)圖2-2。圖2-2進(jìn)行一次查找的具體流程2.2.6替換功能替換功能是基于查找功能,此外還多增加的一個(gè)能夠替換原文本編輯區(qū)域中選定內(nèi)容的功能。可以幫助用戶方便地更換內(nèi)容。第3章程序功能的實(shí)現(xiàn)3.1主窗口的實(shí)現(xiàn)在程序中調(diào)用JFrame、JMenu、JMenuItem等給程序添加窗口、菜單、菜單選項(xiàng)和實(shí)現(xiàn)某些功能需彈出的對(duì)話框。實(shí)現(xiàn)主窗口的代碼如下:finalJFramejf=newJFrame("記事本"); JMenuBarjmb=newJMenuBar(); JMenujm1=newJMenu("文件"); JMenujm2=newJMenu("編輯"); jta=newJTextArea(); JMenuItemjit11=newJMenuItem("新建");JMenuItemjit12=newJMenuItem("打開(kāi)");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各個(gè)功能的實(shí)現(xiàn)3.2.1新建的實(shí)現(xiàn)實(shí)現(xiàn)簡(jiǎn)單新建功能只要將文本框內(nèi)容設(shè)置為空即可,但是要判斷上一個(gè)文本是否改動(dòng)?如果改動(dòng),需提示用戶保存,并套用第一次保存的方法。新建的代碼實(shí)現(xiàn)如下:jit11.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr2=jta.getText(); if(str1.equals(str2)){//文本是否改變? jta.setText(""); }else{//提醒用戶保存上個(gè)文本。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"請(qǐng)選擇保存路徑",FileDialog.SAVE); fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName; try{……}//此處省略,方法與保存功能相同,只需將寫入對(duì)象由str1改為str2即可。catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); }J jta.setText(""); } } });3.2.2打開(kāi)的實(shí)現(xiàn)實(shí)現(xiàn)打開(kāi)功能,首先需要彈出文件對(duì)話框,并且設(shè)置為可見(jiàn),讓用戶選擇.txt文件。先定義一個(gè)字節(jié)流b,將已經(jīng)讀寫進(jìn)來(lái)文本的字節(jié)流通過(guò)循環(huán)傳給b,將讀出來(lái)的東西返回給int型的temp。當(dāng)讀取結(jié)束,將所有數(shù)組的值以字符串的形式傳給給str,并顯示。打開(kāi)的代碼實(shí)現(xiàn)如下:jit12.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ JFramejf1=newJFrame();FileDialogfd=newFileDialog(jf1,"打開(kāi)",FileDialog.LOAD);//打開(kāi)框。 fd.setVisible(true); StringfilefPath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filefPath+fileName;//獲取絕對(duì)路徑。 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é)存儲(chǔ)的內(nèi)容以字符串形式傳給str。 } str1=str; jta.setText(str); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } } });3.2.3保存的實(shí)現(xiàn)實(shí)現(xiàn)保存功能,需要考慮考慮兩種情況:用ifelse語(yǔ)句判斷用戶是否是第一次編輯,如果用戶是第一次編輯文本時(shí),需要彈出文件對(duì)話框,讓用戶選擇保存路徑。如果是先打開(kāi)曾經(jīng)編輯過(guò)的文檔,則路徑是和打開(kāi)的路徑一致。保存時(shí)先建立一個(gè)緩存區(qū),將文檔轉(zhuǎn)成字符數(shù)組的形式后,查找換行符,一旦查找到換行符,便記錄到下一行,以便兼容Windows的原生記事本,最后寫入電腦。保存的代碼實(shí)現(xiàn)如下:jit13.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); if(filepath==null){//判斷路徑是否為空。 JFramejf2=newJFrame(); FileDialogfd=newFileDialog(jf2,"保存",FileDialog.SAVE);//彈出保存對(duì)話框。 fd.setVisible(true); StringfilePath=fd.getDirectory(); StringfileName=fd.getFile(); filepath=filePath+fileName;//獲取絕對(duì)路徑。 } try{ FileWriterfw=newFileWriter(filepath+".txt"); BufferedWriterbw=newBufferedWriter(fw); char[]ch=str1.toCharArray(); for(inti=0;i<=ch.length-1;i++){ if(ch[i]=='\n')//如果遇見(jiàn)換行符則開(kāi)啟新的一行。{bw.newLine(); continue; } bw.write(ch[i]);//寫入電腦。 } bw.flush(); bw.close(); }catch(FileNotFoundExceptione1){ e1.printStackTrace(); }catch(IOExceptione1){ e1.printStackTrace(); } }});3.2.4另存為的實(shí)現(xiàn)實(shí)現(xiàn)另存為功能,和保存功能類似,但不需要考慮用戶是否是第一次編輯,一直讓用戶選擇保存路徑。保存時(shí)先建立一個(gè)緩存區(qū),將文檔以字符數(shù)組的形式,查找其中的換行符,一旦查找到換行符,便記錄到下一行,以便兼容Windows的原生記事本。然后寫入電腦。另存為的主要代碼實(shí)現(xiàn)如下:jit14.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringstr1=jta.getText(); JFramejf2=newJFrame();//不需要判斷絕對(duì)路徑是否存在。 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查找的實(shí)現(xiàn)實(shí)現(xiàn)查找功能,需彈出以Windows記事本為原型,布局好的查找對(duì)話框。在對(duì)話框中設(shè)置查找內(nèi)容輸入?yún)^(qū),區(qū)分大小寫選項(xiàng)及方向選項(xiàng)。在方向選項(xiàng)中向上和向下只能選擇一個(gè)。實(shí)行查找時(shí),獲取光標(biāo)位置,將文本區(qū)內(nèi)容和查找輸入框的內(nèi)容均轉(zhuǎn)成字符串形式。在文本內(nèi)容字符串中根據(jù)用戶選擇方向及光標(biāo)位置來(lái)規(guī)定相應(yīng)的搜索范圍,查找目標(biāo)字符串,并顯示出來(lái)。如果沒(méi)選區(qū)分大小寫,則需將兩個(gè)字符串的大寫內(nèi)容調(diào)用toLowerCase()方法轉(zhuǎn)成小寫,再進(jìn)行搜索。查找的主要代碼實(shí)現(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替換的實(shí)現(xiàn)實(shí)現(xiàn)替換功能,只需在查找的基礎(chǔ)之上在替換對(duì)話框中添加替換內(nèi)容輸入?yún)^(qū)。在查找功能的下方,添加替換內(nèi)容輸入?yún)^(qū),并在查找過(guò)程后將用戶輸入的替換內(nèi)容用replaceSelected方法替換到原文本。替換功能的主要部分的代碼實(shí)現(xiàn)如下:jbc1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ jta.replaceSelection(jtf1.getText()); } ……//其余功能與查找相同 }); 第4章調(diào)試及發(fā)現(xiàn)問(wèn)題的解決在編程的過(guò)程中難免會(huì)遇到功能上的缺失及漏洞,通過(guò)這一次課程設(shè)計(jì),我感覺(jué)對(duì)我來(lái)說(shuō)以下三個(gè)是印象最深刻的問(wèn)題:1、如何使這個(gè)記事本所編輯的內(nèi)容在換行輸入時(shí)能夠與Windows下的記事本兼容顯示?解決方法:在老師的提醒下和保存時(shí)先建立一個(gè)緩存區(qū),將文檔以字符數(shù)組的形式,運(yùn)用循環(huán)查找換行符,一旦查找到換行符,便用.newLine()方法便記錄到下一行,再次循環(huán)找到下一個(gè)換行符,也記錄到下一行,這樣即可與Windows的記事本兼容。2、在測(cè)試時(shí)發(fā)現(xiàn)新建文本時(shí)沒(méi)有自動(dòng)判斷用戶之前文本是否做過(guò)改動(dòng)。解決方法:判斷是否修改過(guò)上一個(gè)文本其實(shí)無(wú)非就兩種情況,第一種是在空文本中直接編輯,第二種是在打開(kāi)某一文件后再進(jìn)行編輯。經(jīng)過(guò)思考和與同學(xué)的探討后,在外部建一個(gè)靜態(tài)字符串str1,設(shè)為空值。將打開(kāi)功能里的值也放在str1中。之后在新建里建一個(gè)字符串str2,將文本區(qū)當(dāng)前內(nèi)容以字符串形式傳給str2。這時(shí)判斷str1與str2是否相同?如果不同,則前文本發(fā)生改動(dòng),彈出文件對(duì)話框,提示保存上一個(gè)文本str2。3、在查找時(shí)發(fā)現(xiàn)只能查到離光標(biāo)最近對(duì)的那一個(gè),不能實(shí)現(xiàn)查找全部對(duì)象。解決方法:經(jīng)過(guò)多次測(cè)試發(fā)現(xiàn)substring區(qū)間開(kāi)閉問(wèn)題導(dǎo)致查找范圍出現(xiàn)了差錯(cuò),使程序光標(biāo)一直停留在原始位置。于是我開(kāi)始考慮光標(biāo)位置是否需要減去查找內(nèi)容的字符串長(zhǎng)度,經(jīng)過(guò)一番試驗(yàn)我發(fā)現(xiàn)向上查找光標(biāo)位置需要減去查找內(nèi)容的字符串,而向下查找時(shí)不需要。第5章程序測(cè)試及分析打開(kāi)記事本顯示的是文件編輯兩個(gè)菜單欄,和文本輸入?yún)^(qū),可以在文本區(qū)輸入任意內(nèi)容。在文本區(qū)輸入本人班級(jí)、姓名及學(xué)號(hào)。如圖5-1所示,是對(duì)編輯的測(cè)試。圖5-1對(duì)編輯功能的測(cè)試在編輯過(guò)的文本區(qū)內(nèi),點(diǎn)擊文件菜單內(nèi)的新建則可新建一個(gè)空的文檔,如果對(duì)上一個(gè)文本進(jìn)行修改則會(huì)提示保存。如圖5-2所示,是對(duì)新建的測(cè)試。圖5-2對(duì)新建功能的測(cè)試點(diǎn)擊打開(kāi),則會(huì)跳出文件選擇對(duì)話框。如圖5-3所示是對(duì)打開(kāi)的測(cè)試。圖5-3對(duì)打開(kāi)功能的測(cè)試在
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030物聯(lián)網(wǎng)發(fā)展技術(shù)安全方法探討與智慧城市建設(shè)前景論文
- 2025-2030牛蛙去農(nóng)場(chǎng)行業(yè)生態(tài)發(fā)展提供分析規(guī)劃評(píng)估投資監(jiān)測(cè)報(bào)告
- 職場(chǎng)新人入職培訓(xùn)手冊(cè)及導(dǎo)師制度
- 制造企業(yè)環(huán)境保護(hù)制度與執(zhí)行細(xì)則
- 精準(zhǔn)醫(yī)療中的數(shù)據(jù)倫理:挑戰(zhàn)與應(yīng)對(duì)
- 精準(zhǔn)醫(yī)學(xué)視角下護(hù)理科研方向探討
- 精準(zhǔn)化管理與績(jī)效個(gè)性化評(píng)價(jià)
- 氣候變化與經(jīng)濟(jì)周期波動(dòng)的協(xié)同效應(yīng)研究-洞察及研究
- 綠色設(shè)計(jì)方法在視聽(tīng)設(shè)備制造中的應(yīng)用-洞察及研究
- 礦山安全風(fēng)險(xiǎn)控制-洞察及研究
- 食品檢驗(yàn)檢測(cè)技術(shù)專業(yè)介紹
- 2025年事業(yè)單位筆試-貴州-貴州財(cái)務(wù)(醫(yī)療招聘)歷年參考題庫(kù)含答案解析(5卷套題【單項(xiàng)選擇100題】)
- 二年級(jí)數(shù)學(xué)上冊(cè)100道口算題大全(每日一練共12份)
- 藥店物價(jià)收費(fèi)員管理制度
- 數(shù)據(jù)風(fēng)險(xiǎn)監(jiān)測(cè)管理辦法
- 國(guó)家開(kāi)放大學(xué)《公共政策概論》形考任務(wù)1-4答案
- 肝惡性腫瘤腹水護(hù)理
- 兒童語(yǔ)言發(fā)育遲緩課件
- 2025年河南省鄭州市中考一模英語(yǔ)試題及答案
- 《高等職業(yè)技術(shù)院校高鐵乘務(wù)專業(yè)英語(yǔ)教學(xué)課件》
- DB15T 3758-2024基本草原劃定調(diào)整技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論