




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 淮 海 工 學(xué) 院 計(jì)算機(jī)工程學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)名稱: 面向?qū)ο笳n程設(shè)計(jì) 選題名稱: 圖像瀏覽器的設(shè)計(jì)與實(shí)現(xiàn) 姓 名: 學(xué) 號 專業(yè)班級: 網(wǎng)絡(luò)工程122班 系 (院): 計(jì)算機(jī)工程學(xué)院 設(shè)計(jì)時(shí)間: 2014.3.122014.4.10 設(shè)計(jì)地點(diǎn): 軟件實(shí)驗(yàn)室、教室 成績:指導(dǎo)教師評語: 簽名: 年 月 日面向?qū)ο笳n程設(shè)計(jì)報(bào)告 第 17 頁,共 17 頁1課程設(shè)計(jì)目的面向象程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的計(jì)算機(jī)專業(yè)基礎(chǔ)課程,課程設(shè)計(jì)是學(xué)習(xí)完該課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于通過實(shí)踐加深學(xué)生對面向?qū)ο蟪绦蛟O(shè)計(jì)的理論、方法和基礎(chǔ)知識的理解,掌握使用Java語言進(jìn)行面向?qū)ο笤O(shè)計(jì)的基本方法,
2、提高運(yùn)用面向?qū)ο笾R分析實(shí)際問題、解決實(shí)際問題的能力。2課程設(shè)計(jì)任務(wù)與要求:課程設(shè)計(jì)可選用NetBeans、Eclipse、JBuilder等作為開發(fā)平臺以提高開發(fā)效率,盡可能熟練掌握其中一種集成開發(fā)環(huán)境。建議采用UML建模技術(shù)進(jìn)行系統(tǒng)的分析設(shè)計(jì),在Visio中畫出系統(tǒng)用例圖和類圖,并將UML圖復(fù)制到設(shè)計(jì)報(bào)告中。通過這次設(shè)計(jì),要求掌握以下內(nèi)容:1)面向?qū)ο蠹夹g(shù)中的繼承與多態(tài)(重載和覆蓋)機(jī)制、各種修飾符的使用2)類、包、接口的定義與使用3)常用工具類與算法的實(shí)現(xiàn)(數(shù)組、向量、字符串、鏈表)4)Java常用標(biāo)準(zhǔn)GUI組件及其事件處理5)Java的異常處理機(jī)制6)Java的數(shù)據(jù)庫連接技術(shù)7)Jav
3、a的多線程技術(shù)與動畫制作8)Java的網(wǎng)絡(luò)編程關(guān)于圖象瀏覽器的設(shè)計(jì)與實(shí)現(xiàn):設(shè)計(jì)一個(gè)能實(shí)現(xiàn)圖象瀏覽與編輯功能的Java程序,包括如下功能:1)從已有的圖象文件列表中選擇某一個(gè),即可顯示該圖象,并可做放大縮小等變換。2)在畫布區(qū)域上可以進(jìn)行各種規(guī)則圖形的繪制(如:線段、矩形、圓等),還可通過鼠標(biāo)的拖動自由繪圖。3)可以連續(xù)播放所選文件夾下的所有圖象。3課程設(shè)計(jì)說明書(一) 圖象瀏覽器概要設(shè)計(jì) :根據(jù)需求分析,用例圖如下所示: 瀏覽圖片縮放圖片編輯圖片自動播放圖片鼠繪圖形打開退出放大縮小畫線畫圓畫方形用戶要選擇圖片,則需要文件的讀寫功能,要import進(jìn)io包;總體的框架用PicBrowseFram
4、e類實(shí)現(xiàn),在定義菜單欄menuBar里放置文件打開選項(xiàng),用Up、Donw兩個(gè)按鈕實(shí)現(xiàn)上一頁,下一頁的功能。要在面板下方放置對圖片的預(yù)覽滾動條,滾動條上放上一頁下一頁的按鈕。縮放圖片功能通過改變圖片的長寬實(shí)現(xiàn),即是實(shí)現(xiàn)對圖片的放大縮小,則設(shè)置picDownScanle()方法和picUpScanle()方法改變圖片大小。左上角文件菜單選項(xiàng)中設(shè)置exit退出菜單,通過System.exit(1)實(shí)現(xiàn)。要實(shí)現(xiàn)自動播放圖片的功能,要用到timer類,通過打開一個(gè)文件夾,每隔一段時(shí)間加載一張圖片。要實(shí)現(xiàn)鼠繪圖形功能要有mouseListener,要重寫里面的方法。分別要實(shí)現(xiàn)畫圓、畫直線、畫方形等操作。
5、(二)圖象瀏覽器詳細(xì)設(shè)計(jì):程序里主要有八個(gè)類,分別是PicBrowseFrame (主框架),F(xiàn)ileChooser(文件選擇類) ,ImagePreview (圖片預(yù)覽類),imgVisible(圖片復(fù)制移動類), UpListener (實(shí)現(xiàn)放大圖片監(jiān)聽類),MoveListener (實(shí)現(xiàn)移動圖片監(jiān)聽類),CopyListener(實(shí)現(xiàn)復(fù)制圖片監(jiān)聽類) ,LoadListener(實(shí)現(xiàn)加載圖片監(jiān)聽類)。 UML類圖關(guān)系如下所示: PicBrowseFrame LoadListenerpublic void showGUI()public static void main(String a
6、rgs)public void initListener() public PicBrowseFrame()void actionPerformed()FileChooserStringfiles;ParentPath,filename,filePath,Jpanel scanlePane ,int tag ,ImageIcon igCopyListenerpublic void showGUI()public static void main(String args)public void initListener() public PicBrowseFrame()void actionPe
7、rformed()void FileChoosercr()private void preView()void preViewMove(int tag)public void picUpScanle() void picDownScanle() UpListenerMoveListener瀏覽圖片縮放圖片編輯圖片自動播放圖片鼠繪圖形打開退出放大縮小畫線畫圓畫方形用戶void actionPerformed()void actionPerformed()ImagePreviewimgVisibleImageIcon thumbnailFile filePublic ImageIcon creat
8、eImage(String path)public void PicCopy()public void PicMove()publicImagePreview(JFileChooser fc)public void loadImage()注:代表內(nèi)部類與外部類之間的關(guān)系表示類之間是關(guān)聯(lián)的關(guān)系程序中的類:(1)PicBrowseFrame類用作整體框架其中定義了JFrame類的Frame為主窗體,JPanel 類的conPane為圖片顯示的區(qū)域,JMenuI類的File 是文件菜單,Edit是編輯菜單,Scanle是縮放菜單,rotate是旋轉(zhuǎn)菜單,JMenuItem 類的tempItem為菜單
9、選項(xiàng),菜單里又包括了打開,退出,放大,縮小等功能的選項(xiàng)。JLabel 類的標(biāo)簽lab,用于加載圖片。在窗體底部設(shè)了上一頁,下一頁按鈕以及小圖預(yù)覽滾動條。(2)FileChooser類實(shí)現(xiàn)圖片的選擇把選的圖加載進(jìn)來,取它的文件地址,用定義的方法對它進(jìn)行相應(yīng)的縮放,看下一張圖,預(yù)覽等操作。(3)LoadListener類調(diào)用FileCh.FileChoosercr()實(shí)現(xiàn)加載圖片的功能。(4)CopyListener類通過imgVisible().PicCopy(FileChooser.filePath, savePath)實(shí)現(xiàn)對圖片復(fù)制操作的監(jiān)聽。(5)MoveListener類通過imgVis
10、ible().PicMove(FileChooser.filePath, savePath)實(shí)現(xiàn)對圖片移動操作的監(jiān)聽。(6)UpListener類通過調(diào)用FileCh.picUpScanle()的方法,實(shí)現(xiàn)對圖片放大操作的監(jiān)聽。(7)DownListener類通過調(diào)用FileCh.picDownScanle()的方法,實(shí)現(xiàn)對圖片縮小操作的監(jiān)聽。(8)imgVisible類,里面定義了相對應(yīng)的方法,實(shí)現(xiàn)對圖片的復(fù)制移動等操作。(9)ImagePreview類繼承于JComponent,實(shí)現(xiàn)了PropertyChangeListener接口,主要是用于在窗體底部的圖片預(yù)覽。(10)TimerAct
11、ion類,繼承于AbstractAction類,用于控制自動播放圖片。(11)OpenFileAction類,繼承于AbstractAction類,用于打開一個(gè)有圖片的文件夾,并且調(diào)用timer.start()方法,設(shè)置計(jì)時(shí)器,每隔一段時(shí)間打開一張圖片。程序的方法及其實(shí)現(xiàn) :(1)public void showGUI()方法實(shí)現(xiàn)了對圖片瀏覽器的整體布局和對按鈕的初始化。主要是通過conPane.setLayout(new BorderLayout (); menuBar.add (File); File.add (tempItem); Scanle.add(tempItem);menuBar
12、.add(Edit);lineButton, rectangleButton, ovalButton, colorChooser, clearButton;panel.setLayout(new BorderLayout();ImageIcon icon = new imgVisible().createImage("");lab = new JLabel(icon);等代碼實(shí)現(xiàn)。對面板的初始化,以實(shí)現(xiàn)繪圓、繪方形等操作。實(shí)現(xiàn)此操作的部分代碼如下:panel2 = new JPanel() public void paint(Graphics g) g.setColor(c
13、olor);if (drawMode = DRAW_LINE) g.drawLine(lp.x, lp.y, cp.x, cp.y); else if (drawMode = DRAW_RECTANGLE) g.drawRect(lp.x, lp.y, Math.abs(lp.x - cp.x),Math.abs(lp.y - cp.y); else if (drawMode = DRAW_OVAL) g.drawOval(lp.x, lp.y, Math.abs(lp.x - cp.x),Math.abs(lp.y - cp.y); else if (drawMode = CLEAR) g.
14、clearRect(lp.x, lp.y, Math.abs(lp.x - cp.x),Math.abs(lp.y - cp.y);(2)public static void main(String args)主方法,構(gòu)建一個(gè)新窗體.public static void main(String args) new PicBrowseFrame().showGUI();。(3)public void FileChoosercr()方法進(jìn)行文件選擇,同時(shí)通過添加滾動條獲取圖片路徑實(shí)現(xiàn)對圖片預(yù)覽。(4)private void preView()在FileChoosercr()中被引用,對獲取的文件
15、地址進(jìn)行減一或加一操作,實(shí)現(xiàn)圖片小圖預(yù)覽。(5)private void preViewMove(int tag)滾動條的實(shí)現(xiàn)方法,通過ImageIcon iconScanle = new ImageIcon(ParentPath + ""+ filesi)獲取圖片信息,加了對空指針的異常處理catch (java.lang.NullPointerException e)。(6)public void picUpScanle()放大圖片的方法,先獲取圖片,再對圖片長寬進(jìn)行width+=50;heigth+=50;加大操作。實(shí)現(xiàn)該操作部分代碼: srcImg = new Im
16、ageIcon(filePath);width += 50;heigth += 50;ImageIcon scaleIcon = new ImageIcon(new imgVisible().getScaledImage(srcImg.getImage(), width, heigth, 1);PicBrowseFrame.lab.setIcon(scaleIcon);(7)public void picDownScanle()縮小圖片的方法,先獲取圖片,再對圖片長寬進(jìn)行width-=50;heigth-=50;加大操作,與放大類似。(8)public void initListener()
17、里面有重寫MouseListener接口和ActionListener接口,主要是重寫了public void mousePressed(MouseEvent e)方法和public void mouseReleased(MouseEvent e)方法。實(shí)現(xiàn)的代碼如下:mouseListener = new MouseListener() public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void m
18、ousePressed(MouseEvent e) lp = e.getPoint();public void mouseReleased(MouseEvent e) cp = e.getPoint();panel2.repaint(); ;ActionListener接口里面的操作分別是對繪圖按鈕的響應(yīng)。(9)public PicBrowseFrame()構(gòu)造方法,添加對鼠標(biāo)事件和繪圖按鈕的監(jiān)聽。(10)public ImagePreview(JFileChooser fc)構(gòu)造方法加載滾動條scanlePane和對其的監(jiān)聽fc.addPropertyChangeListener(this)
19、實(shí)現(xiàn)預(yù)覽。(11)public void loadImage()加載圖片,通過判斷文件是否存在,再實(shí)行打開文件的操作。(12)public void PicCopy(String path1,String path2)通過獲取文件路徑String path1,F(xiàn)ileInputStream in = new FileInputStream(path1),再用文件流輸出該路徑到另一位置FileOutputStream out = new FileOutputStream(path2),對文件進(jìn)行復(fù)制。(13)public void PicMove(String path1,String path
20、2)通過獲取文件路徑,再PicCopy(path1, path2);,復(fù)制原路徑,然后String cmd = "del " + path1刪除原來的路徑實(shí)現(xiàn)對文件進(jìn)行移動。(14)private OpenFileAction()打開一個(gè)圖片文件夾,F(xiàn)ile f= chooser.getSelectedFile(),通過判斷index=files!=null&&files.length>0?0:-1,讓打開的文件夾不為空,如果(files!=null&&files.length>0)再設(shè)置計(jì)時(shí)器timer.start(),每隔一段
21、時(shí)間打開一張圖片。4課程設(shè)計(jì)成果最初打開時(shí)的界面:點(diǎn)擊此處打開一張圖片:選擇圖片所在的文件夾:打開一張圖片后的效果:對該圖片進(jìn)行放大后的結(jié)果:對圖片進(jìn)行縮小的效果:對圖片進(jìn)行復(fù)制點(diǎn)擊這里:然后選擇你要復(fù)制到的文件夾:已復(fù)制到該文件夾:對于移動則同樣是這樣的類似操作,只是原圖片會被刪掉。自動播放圖片功能,點(diǎn)擊這里:自動播放圖片的效果:隨機(jī)截取的某時(shí)刻的圖片:過一段時(shí)間后隨機(jī)截取的圖片:鼠繪涂鴉功能的效果(畫圓、畫方形、畫直線):可以選擇自己喜歡的顏色,只要點(diǎn)擊顏色按鈕即可:或者是自定義顏色:清除涂鴉效果如圖所示:5.課程設(shè)計(jì)心得這次課程設(shè)計(jì)先是參考了網(wǎng)上的代碼然后自己再補(bǔ)充了一些更多的功能,最開
22、始本來是想把那些代碼都放在一個(gè)文件里,可是那樣看起來很不清晰,所以最后有4個(gè)java文件,同時(shí)因?yàn)樵谶@期間恰好參加了學(xué)校的java培訓(xùn),學(xué)會了使用eclipse軟件,這個(gè)軟件能列出詳細(xì)的各類之間的聯(lián)系和各方法等之間的聯(lián)系,這樣在邊編譯邊分析的過程中,有了更大的幫助。圖片瀏覽器最開始實(shí)現(xiàn)了放大、縮小、復(fù)制、移動等功能,然后是想加上旋轉(zhuǎn)圖片的功能,也找到了參考的資料,可是放進(jìn)自己的代碼中就實(shí)現(xiàn)不了了,出現(xiàn)了響應(yīng)不了的問題,改了很久沒有頭緒。后來又著手添加起了鼠繪圖形的功能,最開始不太懂代碼的意義,添加上了以后雖然編譯通過,但是總是在運(yùn)行的時(shí)候出現(xiàn)(java.lang.NullPointerException)即空指針的錯誤,并且這個(gè)錯誤困擾了我有一個(gè)多星期,查閱了很久知道是可能是引用類型在未賦值的情況下(默認(rèn)為null)卻執(zhí)行了某些具體的操作出現(xiàn)了這樣的異常,需要看返回的錯誤信息,看看是哪個(gè)引用類型未被初始化而導(dǎo)致??墒钦业藉e誤的那行卻未查出問題。想了很久,并且對照了一些相
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多方投資擔(dān)保合同
- 建筑工程分包合同5篇
- 賠償協(xié)議書的格式年
- 公路交通工程與道路養(yǎng)護(hù)作業(yè)指導(dǎo)書
- 煤炭進(jìn)口合同6篇
- 針織橫機(jī)電控產(chǎn)業(yè)分析報(bào)告
- 南瓜收購合同范本
- 養(yǎng)殖用電合同范本
- 賣窯洞合同范本
- 一般經(jīng)濟(jì)購買合同范本
- 2024醫(yī)療器械行業(yè)數(shù)字化轉(zhuǎn)型白皮書
- 皮膚科常見診療技術(shù)操作規(guī)范
- 成都中醫(yī)藥大學(xué)公共管理專業(yè)考研復(fù)試面試問題整理附面試技巧自我介紹
- 合肥的文化民俗
- 傷口的延續(xù)性護(hù)理
- 藥品批發(fā)公司培訓(xùn)課件模板
- 《教科版一國兩制》課件
- 急性腎挫裂傷護(hù)理查房課件
- 腦出血個(gè)案護(hù)理計(jì)劃
- 小學(xué)生電力科普小講座(課件)-小學(xué)常識科普主題班會
- 第八次課-冶金考古
評論
0/150
提交評論