Java課程設(shè)計(jì)-幻燈片形式的圖片瀏覽器_第1頁
Java課程設(shè)計(jì)-幻燈片形式的圖片瀏覽器_第2頁
Java課程設(shè)計(jì)-幻燈片形式的圖片瀏覽器_第3頁
Java課程設(shè)計(jì)-幻燈片形式的圖片瀏覽器_第4頁
Java課程設(shè)計(jì)-幻燈片形式的圖片瀏覽器_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章課題概述本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的題目是設(shè)計(jì)并實(shí)現(xiàn)幻燈片形式的圖片瀏覽器,可以設(shè)置播放文件夾,播放時(shí)間。1.1課題的目的圖片瀏覽器在日常生活中必不可缺,我們生活中遇到的任何圖片文件都必須通過圖片瀏覽器來查看。隨著圖片瀏覽器的不斷發(fā)展,其功能也日益完善。由原來單張播放,到現(xiàn)在可以做出各種效果,可見其地位不容忽視。本程序以圖片瀏覽為中心,采用面向?qū)ο箝_發(fā)方法對圖片瀏覽器內(nèi)部組織結(jié)構(gòu)、功能需求進(jìn)行可行性分析。本程序主要對png,jpg,gif等圖片格式進(jìn)行瀏覽功能,無需手動播放,可設(shè)置播放時(shí)間自動播放圖片。這次設(shè)計(jì),能夠讓我較熟練的使用常用的容器組件,圖形界面。對監(jiān)聽也有初步了解。1.2課題的要求1.2.1窗口界面的要求(1)程序運(yùn)行后,跳出界面。(2)在界面上顯示選擇文件,播放,暫停等按鈕。(3)在界面上添加時(shí)間標(biāo)簽(設(shè)置播放時(shí)間間隔(以毫秒為單位))。(4)采用BorderLayout布局方式,將標(biāo)簽放在最下端,圖片標(biāo)簽放在中間(5)點(diǎn)擊選擇文件后,跳出文件選擇窗口。1.2.2程序?qū)崿F(xiàn)的功能要求(1)選擇任意文件夾,點(diǎn)擊打開,可播放里面的圖片文件,并且可以播放該文件夾內(nèi)子文件夾里的圖片。(2)自動跳過文件夾里非圖片文件,并實(shí)現(xiàn)循環(huán)播放。(3)每次運(yùn)行結(jié)束自動清空集合里的圖片,以免第二次播放時(shí)重復(fù)出現(xiàn)。(4)監(jiān)聽打開文件,播放等控件的行為,及時(shí)進(jìn)行應(yīng)答。(5)采用線程,獲得時(shí)間,設(shè)置自動播放時(shí)間,可以為1,2,3,4,5秒。

第2章概要設(shè)計(jì)2.1整個(gè)程序的模塊結(jié)構(gòu)及流程文件夾圖片文件暫停播放瀏覽圖片設(shè)置時(shí)間打開文件功能模塊文件夾圖片文件暫停播放瀏覽圖片設(shè)置時(shí)間打開文件功能模塊2.2各個(gè)模塊功能描述打開文件:點(diǎn)擊打開文件,跳出選擇文件窗口,選擇需要播放圖片的文件夾。播放:點(diǎn)擊播放按鈕,可自動循環(huán)播放文件夾及其子文件夾里所有圖片文件。暫停:點(diǎn)擊播放后,該按鈕自動變?yōu)闀和0粹o。設(shè)置播放時(shí)間:可選擇1000,2000,3000,4000,5000(以毫秒為單位)來播放文件夾里的圖片。

第3章程序功能的實(shí)現(xiàn)3.1主函數(shù)的實(shí)現(xiàn)初始化對象,主方法是構(gòu)造函數(shù)的入口,執(zhí)行主方法后,則做出界面,并顯示窗口可見。publicstaticvoidmain(String[]args){ PhotoAlbumalbum=newPhotoAlbum(); album.setVisible(true); }3.2主要功能模塊的實(shí)現(xiàn)3.2.1圖形界面的實(shí)現(xiàn)使用javax.swing.UIManager類中setLookAndFeel方法,設(shè)置外觀。然后設(shè)置出窗口大小,位置,以及采用的布局。我采用的是BorderLayout(),這個(gè)布局方式便于瀏覽圖片。我現(xiàn)將圖片綁在滾動條scrolll里,然后將滾動條放在標(biāo)簽中,放在窗口的中心。再添加一個(gè)標(biāo)簽,將時(shí)間提示settime放入標(biāo)簽中,并調(diào)用setFont()方法,設(shè)置標(biāo)簽字體為隸書,加粗,16磅。調(diào)用Choice方法,并加入時(shí)間選擇1000,2000,3000,4000,5000(以毫秒為單位)。創(chuàng)建一個(gè)面板newJpanel(),調(diào)用setBackground(),將面板顏色設(shè)置為cyan。添加兩個(gè)JButton,分別為選擇文件按鈕,播放按鈕,并調(diào)用setFont()方法,設(shè)置按鈕字體為隸書,加粗,16磅。并將標(biāo)簽添加到面板中。最后將面板add(panel,BorderLayout.SOUTH),并對各個(gè)控件進(jìn)行監(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è)置播放時(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打開文件的實(shí)現(xiàn)將所有根文件存入數(shù)組中,用循環(huán)進(jìn)行遍歷,篩選出文件中的圖片文件。判斷該文件是否為目錄,若為目錄,則調(diào)用自身方法,用遞歸,實(shí)現(xiàn)播放文件夾里子文件夾里的圖片。判斷一個(gè)文件是否為圖片文件?先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播放的實(shí)現(xiàn)若條件成立,則獲得線程時(shí)間。調(diào)用getSelectedItem()方法,將時(shí)間強(qiáng)制轉(zhuǎn)化成Long。初始化對象thread后,調(diào)用start(),啟動線程。添加暫停按鈕。代碼如下:publicvoidplay(){ if(isopen){ if(!isplay){ speed=Long.parseLong(speedtime.getSelectedItem());//獲取當(dāng)前選擇的字符串表示形式 thread=newcreatePlayThread(); play.setText("暫停"); isplay=true; thread.start(); } else{ stopPlay(); } } }3.2.4展現(xiàn)圖片的實(shí)現(xiàn)獲得集合C中文件,轉(zhuǎn)化成字符串形式,再轉(zhuǎn)化成圖片形式,再壓縮圖片,存在icon。調(diào)用setIcon,顯示該圖片,再調(diào)用setHorizontalAlignment,設(shè)置標(biāo)簽內(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è)置標(biāo)簽內(nèi)容沿X軸的對齊方式 width=this.getWidth(); heigth=this.getHeight(); }3.2.5暫停的實(shí)現(xiàn)線程調(diào)用stop()方法,添加播放,更改isplay為false.publicvoidstopPlay(){ thread.stop(); play.setText("播放"); isplay=false; }3.2.6線程的實(shí)現(xiàn)創(chuàng)建線程有兩種形式,實(shí)現(xiàn)Runnable接口、繼承Thread類。在此,我采用的是繼承Thread類。因?yàn)樵擃愑衧leep,可以讓線程休眠,將Speed傳入,便可實(shí)現(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)容?解決方法:起初想了很久,知道一定有一個(gè)方法可以只顯示出目錄。于是就嘗試了很多,都失敗了,后來百度了一下,知道了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.怎樣才能讓圖片按照一定的時(shí)間間隔播放呢?解決方式:首先我想到肯定要用到線程。創(chuàng)建線程有兩種形式,實(shí)現(xiàn)Runnable接口、繼承Thread類。在此,我采用的是繼承Thread類。因?yàn)樵擃愑衧leep,可以讓線程休眠,將Speed傳入,便可實(shí)現(xiàn)線程休眠。將我的speedtime轉(zhuǎn)化成字符串speed=Long.parseLong(speedtime.getSelectedItem()),最后將speed傳給sleep,便可實(shí)現(xiàn)按照一定時(shí)間間隔播放圖片了。4.圖片可以播放后,但是播到最后一張便停止了,不能循環(huán)播放,怎樣才能循環(huán)播放呢?解決方法:設(shè)置中間變量index,起初令index為0,從第一張起播放,隨后index遞增,index=(++index<c.size()?index:0)判斷index與集合C比較大小,若大于等于集合C,則index賦值再一次為零,進(jìn)而實(shí)現(xiàn)循環(huán)播放。5.雖然實(shí)現(xiàn)了循環(huán)播放,但是第一次播放后,系統(tǒng)自動記錄下圖片內(nèi)容,第二次播放時(shí),會將上次圖片一同播出解決方法:在播放圖片前,調(diào)用c.clear()先將集合C中元素清空即可。

第5章程序測試及分析運(yùn)行程序后,首先跳出界面。點(diǎn)擊打開文件按鈕,跳出文件選擇窗口。圖5-1運(yùn)行界面點(diǎn)擊打開文件按鈕,跳出文件選擇窗口,選擇文件夾后。點(diǎn)擊打開。圖5-2打開文件窗口圖片就緒后,設(shè)置播放時(shí)間為1000(以毫秒為單位),點(diǎn)擊播放。圖5-3播放窗口點(diǎn)擊暫停,設(shè)置播放時(shí)間為5000(以毫秒為單位),點(diǎn)擊播放。圖5-4更改時(shí)間窗口第6章總結(jié)通過本次課程設(shè)計(jì),讓我更加熟練地使用java類中的各種方法。尤其是對圖形界面的編輯,以及多線程,監(jiān)聽等內(nèi)容有了更加深刻的了解。當(dāng)自己動手編出一個(gè)滿意的程序時(shí),感到十分欣慰。1.還記得剛剛看到課程設(shè)計(jì)題目時(shí),便對圖片瀏覽器,隨機(jī)點(diǎn)名器頗感興趣。最后選擇了圖片瀏覽器,因?yàn)槟軌驅(qū)懗鲆粋€(gè)程序,把自己喜歡的圖片展現(xiàn)出來,對我而言意義很大。然而,我卻很擔(dān)心自己能否完成這項(xiàng)任務(wù),對自己表示懷疑。因?yàn)樗碾y度比上學(xué)期明顯加大了很多,上學(xué)期的我也只是學(xué)到了皮毛而已。隨后便開始著急,去圖書館借了很多有關(guān)java的書,重點(diǎn)看了圖形界面,線程等內(nèi)容。因此對我需要做的程序有了大致的了解。照著書一步一步完成個(gè)大概,先不管好不好看,實(shí)現(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論