版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一.課程設(shè)計(jì)的任務(wù)及要求二.需求分析圖形化界面(GUI)編程,編寫一個(gè)圖片瀏覽器程序可以支持“.GIF”, “.JPEG”,“.jpeg”,“.TGA”,“.JPG”,“.jpg”等格式,單張打開圖片,可以將同一目錄下的圖片按縮略圖打開按“上一張”“下一張”按鈕可以顯示相應(yīng)圖片。運(yùn)行Applet時(shí),圖像不是一氣呵成的,因?yàn)榉椒ú皇前蓤D像完整的裝入內(nèi)存再顯示的。于此相反,方法創(chuàng)建一個(gè)線程,該線程與Applet的原有線程并發(fā)執(zhí)行,一邊裝入一邊顯示,從而產(chǎn)生上了不聯(lián)需顯示的現(xiàn)象。為了提高圖像才顯示效果,可以采用雙緩沖技術(shù):首先把圖像裝入內(nèi)存,然后再顯示在屏幕上。三. 設(shè)計(jì)思路3.1界面設(shè)計(jì)選擇圖片按
2、鈕:主要用dir函數(shù)實(shí)現(xiàn)圖片的遍歷。上一張,下一張:通過做標(biāo)軸回調(diào)函數(shù)實(shí)現(xiàn)。由于本軟件為單機(jī)軟件,不需要大量的數(shù)據(jù)讀寫和數(shù)據(jù)交換,實(shí)現(xiàn)上、下功能要求只能讀取PictureBox控件當(dāng)前加載的目錄,讀取當(dāng)前路徑,創(chuàng)建一維數(shù)組。frame = new Frame(PictureViewer); Panel pb = new Panel(); Button select = new Button(選擇圖片); previous = new Button(上一張); next = new Button(下一張); select.addActionListener(this); previous.add
3、ActionListener(this);3.2.圖像加載:Applet常用來(lái)顯示儲(chǔ)存在文件中的圖像,多數(shù)Applet使用的是GIF或JPEG格式的圖像文件。需Applet加載圖像只需首先定義Image對(duì)象,然后使用getImage()方法把圖像和文件結(jié)合起來(lái)即可。image_width = bi.getWidth(this); image_height = bi.getHeight(this); double image_proportion = 1.0 * image_height / image_width; System.out.println(image: w +image_widt
4、h+ ,h +image_height+ ,p1 +image_proportion);if(image_proportion screen_proportion) image_height = screen_height; image_width = (int)(image_height / image_proportion); System.out.println( p1p0 w= +image_width); else image_width = screen_width; image_height = (int)(image_width * image_proportion); Sys
5、tem.out.println( p0p1 h= +image_height); 四.詳細(xì)設(shè)計(jì)4.1.程序設(shè)計(jì)流程圖開始圖片上一張查找盤符圖片下一張查找文件夾結(jié)束查找文件4.2.源程序代碼package C;import java.io.File;import java.io.FilenameFilter;public class MyFilter implements FilenameFilter private String extension; public MyFilter() extension = new String.jpg, .JPG, .gif, .GIF, .png, .P
6、NG, .jpeg, .JPEG; public MyFilter(String extension) this.extension = extension; public boolean accept(File dir,String name) for(String s : extension) if(name.endsWith(s) return true; return false; package C;import java.awt.*;import java.awt.event.*;import java.awt.image.*;public class MyCanvas exten
7、ds Canvas implements ComponentListener /* * */private static final long serialVersionUID = 1L;private BufferedImage bi; private Image im; private int image_width; private int image_height; public void setImage(BufferedImage bi) this.bi = bi; this.zoom(); public void paint(Graphics g) g.drawImage(im,
8、(this.getWidth()-image_width)/2,(this.getHeight()-image_height)/2,this); public void componentResized(ComponentEvent e) if(bi != null) System.out.println(resize!); this.zoom(); this.repaint(); public void componentMoved(ComponentEvent e) public void componentShown(ComponentEvent e) public void compo
9、nentHidden(ComponentEvent e) public void zoom() if(bi = null) return; int screen_width = this.getWidth(); int screen_height = this.getHeight(); double screen_proportion = 1.0 * screen_height / screen_width; System.out.println(screen: w +screen_width+ ,h +screen_height+ ,p0 +screen_proportion); image
10、_width = bi.getWidth(this); image_height = bi.getHeight(this); double image_proportion = 1.0 * image_height / image_width; System.out.println(image: w +image_width+ ,h +image_height+ ,p1 +image_proportion); if(image_proportion screen_proportion) image_height = screen_height; image_width = (int)(imag
11、e_height / image_proportion); System.out.println( p1p0 w= +image_width); else image_width = screen_width; image_height = (int)(image_width * image_proportion); System.out.println( p0p1 h= +image_height); im = bi.getScaledInstance(image_width,image_height,Image.SCALE_SMOOTH); package C;import java.aw
12、t.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;public class T implements ActionListener private Frame frame; private MyCanvas mc ; private String fpath; private String fname; private File files; private int findex ; private FileDialog fd_load; private MyF
13、ilter filter; private Button previous ; private Button next ; public static void main( String args) throws Exception new T().init(); public void init() frame = new Frame(PictureViewer); Panel pb = new Panel(); Button select = new Button(選擇圖片); previous = new Button(上一張); next = new Button(下一張); sele
14、ct.addActionListener(this); previous.addActionListener(this); next.addActionListener(this); pb.add(select); pb.add(previous); pb.add(next); mc = new MyCanvas(); mc.setBackground(new Color(200,210,230); mc.addComponentListener(mc); frame.add(pb,North); frame.add(mc,Center); frame.setSize(360,360); fr
15、ame.setLocation(400,200); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); frame.setVisible(true); this.validateButton(); filter = new MyFilter(); fd_load = new FileDialog(frame,打開文件,FileDialog.LOAD); fd_load.setFilenameFilter(filter); public vo
16、id actionPerformed(ActionEvent e) String command = e.getActionCommand(); if(command.equals(選擇圖片) fd_load.setVisible(true); fpath = fd_load.getDirectory(); fname = fd_load.getFile(); if(fpath != null) & (fname != null) this.display(new File(fpath + fname); files = new File(fpath).listFiles(filter); t
17、his.setIndex(); else if(command.equals(上一張) findex-; if(findex= files.length) findex = files.length-1; this.display(filesfindex); this.validateButton(); public void display(File f) try BufferedImage bi = ImageIO.read(f); mc.setImage(bi); frame.setTitle(PictureViewer - + f.getName() + ); catch(Except
18、ion e) e.printStackTrace(); mc.repaint(); public void setIndex() File current = new File(fpath + fname); if(files != null) for(int i=0;i 0); next.setEnabled(files!=null) & (findex(files.length-1); 五.運(yùn)行調(diào)試與分析討論5.1.將同一目錄下的圖片按縮略圖打開 5.2.單張打開圖片5.3.按”上一張”,”下一張”按鈕打開圖片六. 設(shè)計(jì)體會(huì)與小結(jié)我通過這次編程實(shí)踐學(xué)習(xí)到了Image和Griphics相關(guān)的類的使用。首先我通過網(wǎng)上搜集資料和自己看jdk api對(duì)Image、graphics、swing中的類有了實(shí)質(zhì)的操練,對(duì)它們的理解有了進(jìn)一步的理解。不象以前只有模糊的記憶,根本不會(huì)運(yùn)用到實(shí)際的情況中,僅僅照著課本超代碼。不過由于技術(shù)水平限制,寫的代
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑承包合同
- 預(yù)應(yīng)力鋼筋張拉工安全操作規(guī)程(3篇)
- 知路愛路護(hù)路活動(dòng)方案樣本(2篇)
- 2025年夢(mèng)想主題演講稿例文(2篇)
- 托輥旋轉(zhuǎn)阻力測(cè)試儀操作規(guī)程模版(3篇)
- 2025年幼兒園配班職責(zé)制度(二篇)
- 2025年艱苦奮斗演講稿模版(3篇)
- 預(yù)防接種異常反應(yīng)應(yīng)急處置預(yù)案模版(2篇)
- 【正版授權(quán)】 ISO 5700:2025 EN Tractors for agriculture and forestry - Roll-over protective structures - Static test method and acceptance conditions
- 2024年生物制藥技術(shù)引進(jìn)與許可合同
- 選礦廠建設(shè)課件
- 部編人教版7-9年級(jí)語(yǔ)文目錄
- 人教版小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)七單元《數(shù)學(xué)廣角-植樹問題》單元集體備課整體設(shè)計(jì)
- 中國(guó)超重肥胖醫(yī)學(xué)營(yíng)養(yǎng)治療指南
- 嚴(yán)重精神障礙患者家屬護(hù)理教育
- 汽車4S店市場(chǎng)部工作計(jì)劃
- 現(xiàn)代營(yíng)銷學(xué)原理課件
- 德語(yǔ)語(yǔ)言學(xué)導(dǎo)論智慧樹知到期末考試答案2024年
- 拒絕早戀主題班會(huì) 課件(34張)2023-2024學(xué)年主題班會(huì)
- 離婚協(xié)議書完整版Word模板下載
- 招標(biāo)代理機(jī)構(gòu)內(nèi)部監(jiān)督管理制度
評(píng)論
0/150
提交評(píng)論