版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章課題概述本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的題目是設(shè)計并實現(xiàn)幻燈片形式的圖片瀏覽器,可以設(shè)置播放文件夾,播放時間。1.1課題的目的圖片瀏覽器在日常生活中必不可缺,我們生活中遇到的任何圖片文件都必須通過圖片瀏覽器來查看。隨著圖片瀏覽器的不斷發(fā)展,其功能也日益完善。由原來單張播放,到現(xiàn)在可以做出各種效果,可見其地位不容忽視。本程序以圖片瀏覽為中心,采用面向?qū)ο箝_發(fā)方法對圖片瀏覽器內(nèi)部組織結(jié)構(gòu)、功能需求進行可行性分析。本程序主要對png,jpg,gif等圖片格式進行瀏覽功能,無需手動播放,可設(shè)置播放時間自動播放圖片。這次設(shè)計,能夠讓我較熟練的使用常用的容器組件,圖形界面。對監(jiān)聽也有初步了解。1.2課題的要求1.2.1窗口界面的要求(1)程序運行后,跳出界面。(2)在界面上顯示選擇文件,播放,暫停等按鈕。(3)在界面上添加時間標簽(設(shè)置播放時間間隔(以毫秒為單位))。(4)采用BorderLayout布局方式,將標簽放在最下端,圖片標簽放在中間(5)點擊選擇文件后,跳出文件選擇窗口。1.2.2程序?qū)崿F(xiàn)的功能要求(1)選擇任意文件夾,點擊打開,可播放里面的圖片文件,并且可以播放該文件夾內(nèi)子文件夾里的圖片。(2)自動跳過文件夾里非圖片文件,并實現(xiàn)循環(huán)播放。(3)每次運行結(jié)束自動清空集合里的圖片,以免第二次播放時重復(fù)出現(xiàn)。(4)監(jiān)聽打開文件,播放等控件的行為,及時進行應(yīng)答。(5)采用線程,獲得時間,設(shè)置自動播放時間,可以為1,2,3,4,5秒。
第2章概要設(shè)計2.1整個程序的模塊結(jié)構(gòu)及流程文件夾圖片文件暫停播放瀏覽圖片設(shè)置時間打開文件功能模塊文件夾圖片文件暫停播放瀏覽圖片設(shè)置時間打開文件功能模塊2.2各個模塊功能描述打開文件:點擊打開文件,跳出選擇文件窗口,選擇需要播放圖片的文件夾。播放:點擊播放按鈕,可自動循環(huán)播放文件夾及其子文件夾里所有圖片文件。暫停:點擊播放后,該按鈕自動變?yōu)闀和0粹o。設(shè)置播放時間:可選擇1000,2000,3000,4000,5000(以毫秒為單位)來播放文件夾里的圖片。
第3章程序功能的實現(xiàn)3.1主函數(shù)的實現(xiàn)初始化對象,主方法是構(gòu)造函數(shù)的入口,執(zhí)行主方法后,則做出界面,并顯示窗口可見。publicstaticvoidmain(String[]args){ PhotoAlbumalbum=newPhotoAlbum(); album.setVisible(true); }3.2主要功能模塊的實現(xiàn)3.2.1圖形界面的實現(xiàn)使用javax.swing.UIManager類中setLookAndFeel方法,設(shè)置外觀。然后設(shè)置出窗口大小,位置,以及采用的布局。我采用的是BorderLayout(),這個布局方式便于瀏覽圖片。我現(xiàn)將圖片綁在滾動條scrolll里,然后將滾動條放在標簽中,放在窗口的中心。再添加一個標簽,將時間提示settime放入標簽中,并調(diào)用setFont()方法,設(shè)置標簽字體為隸書,加粗,16磅。調(diào)用Choice方法,并加入時間選擇1000,2000,3000,4000,5000(以毫秒為單位)。創(chuàng)建一個面板newJpanel(),調(diào)用setBackground(),將面板顏色設(shè)置為cyan。添加兩個JButton,分別為選擇文件按鈕,播放按鈕,并調(diào)用setFont()方法,設(shè)置按鈕字體為隸書,加粗,16磅。并將標簽添加到面板中。最后將面板add(panel,BorderLayout.SOUTH),并對各個控件進行監(jiān)聽。newJFileChooser(),調(diào)用setFileSelectionMode(),只顯示出目錄。publicPhotoAlbum(){ super("歡迎使用圖片瀏覽器"); try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//指定外觀 }catch(ClassNotFoundExceptione1){ e1.printStackTrace(); }catch(InstantiationExceptione1){ e1.printStackTrace(); }catch(IllegalAccessExceptione1){ e1.printStackTrace(); }catch(UnsupportedLookAndFeelExceptione1){ e1.printStackTrace(); } setSize(600,500); setLocation(300,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(newBorderLayout()); image=newJLabel();//顯示圖片 image.setSize(this.getWidth(),this.getHeight()); scroll=newJScrollPane(image); add(scroll,BorderLayout.CENTER); settime=newJLabel("設(shè)置播放時間間隔(以毫秒為單位)"); settime.setFont(newFont("隸書",Font.BOLD,16)); speedtime=newChoice(); speedtime.add("1000"); speedtime.add("2000"); speedtime.add("3000"); speedtime.add("4000"); speedtime.add("5000"); speedtime.setFont(newFont("隸書",Font.BOLD,16)); panel=newJPanel(); panel.setBackground(Color.cyan); open=newJButton("打開文件"); open.setFont(newFont("隸書",Font.BOLD,16)); open.addActionListener(this); play=newJButton("播放"); play.setFont(newFont("隸書",Font.BOLD,16)); play.addActionListener(this); panel.add(open); panel.add(play); panel.add(settime); panel.add(speedtime); add(panel,BorderLayout.SOUTH); }3.2.2打開文件的實現(xiàn)將所有根文件存入數(shù)組中,用循環(huán)進行遍歷,篩選出文件中的圖片文件。判斷該文件是否為目錄,若為目錄,則調(diào)用自身方法,用遞歸,實現(xiàn)播放文件夾里子文件夾里的圖片。判斷一個文件是否為圖片文件?先String[]names={".png",".PNG",".jpg",".JPG",".gif",".GIF"}file[i].getName().toString().endsWith(names[j]),先獲得文件名,再轉(zhuǎn)化成字符串,最后判斷末尾符號與names是否一致,若一致,則將該文件添加到集合C中,從第一張開始播放。代碼如下:publicvoidOpen(Filef){ File[]file=f.listFiles(); String[]names={".png",".PNG",".jpg",".JPG",".gif",".GIF"}; if(file.length>0){ for(inti=0;i<file.length;i++){ if(file[i].isDirectory()){ Open(file[i]); } for(intj=0;j<names.length;j++){ if(file[i].getName().toString().endsWith(names[j])){ c.add(file[i]); break; }else{ continue; } } } if(c.size()>0){ index=0; showImage(image.getWidth(),image.getHeight()); isopen=true; } } }3.2.3播放的實現(xiàn)若條件成立,則獲得線程時間。調(diào)用getSelectedItem()方法,將時間強制轉(zhuǎn)化成Long。初始化對象thread后,調(diào)用start(),啟動線程。添加暫停按鈕。代碼如下:publicvoidplay(){ if(isopen){ if(!isplay){ speed=Long.parseLong(speedtime.getSelectedItem());//獲取當前選擇的字符串表示形式 thread=newcreatePlayThread(); play.setText("暫停"); isplay=true; thread.start(); } else{ stopPlay(); } } }3.2.4展現(xiàn)圖片的實現(xiàn)獲得集合C中文件,轉(zhuǎn)化成字符串形式,再轉(zhuǎn)化成圖片形式,再壓縮圖片,存在icon。調(diào)用setIcon,顯示該圖片,再調(diào)用setHorizontalAlignment,設(shè)置標簽內(nèi)容沿X軸的對齊方式。代碼如下:publicvoidshowImage(intwidth,intheigh){ Imageicon=newImageIcon(c.get(index).toString()).getImage().getScaledInstance(width,heigh,Image.SCALE_DEFAULT); image.setIcon(newImageIcon(icon)); image.setHorizontalAlignment(SwingConstants.CENTER);//設(shè)置標簽內(nèi)容沿X軸的對齊方式 width=this.getWidth(); heigth=this.getHeight(); }3.2.5暫停的實現(xiàn)線程調(diào)用stop()方法,添加播放,更改isplay為false.publicvoidstopPlay(){ thread.stop(); play.setText("播放"); isplay=false; }3.2.6線程的實現(xiàn)創(chuàng)建線程有兩種形式,實現(xiàn)Runnable接口、繼承Thread類。在此,我采用的是繼承Thread類。因為該類有sleep,可以讓線程休眠,將Speed傳入,便可實現(xiàn)線程休眠。classcreatePlayThreadextendsThread{ publicvoidrun(){ while(true){ showImage(image.getWidth(),image.getHeight()); try{ sleep(speed); }catch(InterruptedExceptione){ e.printStackTrace(); } index=(++index<c.size()?index:0); } }}第4章調(diào)試及發(fā)現(xiàn)問題的解決1.打開文件后,如何只顯示目錄,不顯示文件內(nèi)容?解決方法:起初想了很久,知道一定有一個方法可以只顯示出目錄。于是就嘗試了很多,都失敗了,后來百度了一下,知道了JFileChooser()方法。調(diào)用其中setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY),設(shè)置只顯示目錄即可。2.怎樣才能夠播放文件夾里子文件夾里的圖片?如果子文件還有子文件,一層層循環(huán)下去,該怎么使其中圖片一起顯示出來呢?解決方法:剛開始想在String[]names={".png",".PNG",".jpg",".JPG",".gif",".GIF"}中添加出文件夾的格式,后來失敗了。我便向老師請教,老師提示用遞歸。我便嘗試在循環(huán)之前,添加一步操作,使用file[i].isDirectory()判斷該文件是否為目錄?若是目錄,則Open(file[i]),用遞歸的方式掃描子文件夾,并顯示出所有圖片文件。3.怎樣才能讓圖片按照一定的時間間隔播放呢?解決方式:首先我想到肯定要用到線程。創(chuàng)建線程有兩種形式,實現(xiàn)Runnable接口、繼承Thread類。在此,我采用的是繼承Thread類。因為該類有sleep,可以讓線程休眠,將Speed傳入,便可實現(xiàn)線程休眠。將我的speedtime轉(zhuǎn)化成字符串speed=Long.parseLong(speedtime.getSelectedItem()),最后將speed傳給sleep,便可實現(xiàn)按照一定時間間隔播放圖片了。4.圖片可以播放后,但是播到最后一張便停止了,不能循環(huán)播放,怎樣才能循環(huán)播放呢?解決方法:設(shè)置中間變量index,起初令index為0,從第一張起播放,隨后index遞增,index=(++index<c.size()?index:0)判斷index與集合C比較大小,若大于等于集合C,則index賦值再一次為零,進而實現(xiàn)循環(huán)播放。5.雖然實現(xiàn)了循環(huán)播放,但是第一次播放后,系統(tǒng)自動記錄下圖片內(nèi)容,第二次播放時,會將上次圖片一同播出解決方法:在播放圖片前,調(diào)用c.clear()先將集合C中元素清空即可。
第5章程序測試及分析運行程序后,首先跳出界面。點擊打開文件按鈕,跳出文件選擇窗口。圖5-1運行界面點擊打開文件按鈕,跳出文件選擇窗口,選擇文件夾后。點擊打開。圖5-2打開文件窗口圖片就緒后,設(shè)置播放時間為1000(以毫秒為單位),點擊播放。圖5-3播放窗口點擊暫停,設(shè)置播放時間為5000(以毫秒為單位),點擊播放。圖5-4更改時間窗口第6章總結(jié)通過本次課程設(shè)計,讓我更加熟練地使用java類中的各種方法。尤其是對圖形界面的編輯,以及多線程,監(jiān)聽等內(nèi)容有了更加深刻的了解。當自己動手編出一個滿意的程序時,感到十分欣慰。1.還記得剛剛看到課程設(shè)計題目時,便對圖片瀏覽器,隨機點名器頗感興趣。最后選擇了圖片瀏覽器,因為能夠?qū)懗鲆粋€程序,把自己喜歡的圖片展現(xiàn)出來,對我而言意義很大。然而,我卻很擔心自己能否完成這項任務(wù),對自己表示懷疑。因為它的難度比上學期明顯加大了很多,上學期的我也只是學到了皮毛而已。隨后便開始著急,去圖書館借了很多有關(guān)java的書,重點看了圖形界面,線程等內(nèi)容。因此對我需要做的程序有了大致的了解。照著書一步一步完成個大概,先不管好不好看,實現(xiàn)了功
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人創(chuàng)業(yè)投資延期借款合同
- 二零二五年度房地產(chǎn)項目開發(fā)合同合4篇
- 2025年度個人應(yīng)收賬款抵押債權(quán)轉(zhuǎn)讓合同4篇
- 2025年度美容院員工職業(yè)傷害賠償合同范本4篇
- 二零二五年度綠色建筑項目農(nóng)民工用工保障合同2篇
- 2025年度個人營運汽車租賃車輛智能駕駛輔助系統(tǒng)安裝合同3篇
- 二零二五年度慈溪市生態(tài)環(huán)境編制與治理合同4篇
- 二零二五年度古董家具修復(fù)木工合同范本4篇
- 2025年度個人土地抵押貸款合同信用評估范本4篇
- 臨建設(shè)施轉(zhuǎn)讓合同范本(2024版)
- 《電力用直流電源系統(tǒng)蓄電池組遠程充放電技術(shù)規(guī)范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化運維服務(wù)信息化運維方案
- 汽車修理廠員工守則
- 六年級上冊數(shù)學應(yīng)用題100題
- 個人代賣協(xié)議
- 公安交通管理行政處罰決定書式樣
- 10.《運動技能學習與控制》李強
- 冀教版數(shù)學七年級下冊綜合訓(xùn)練100題含答案
- 1神經(jīng)外科分級護理制度
- 場館惡劣天氣處置應(yīng)急預(yù)案
評論
0/150
提交評論