版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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常用來顯示儲(chǔ)存在文件中的圖像,多數(shù)Applet使用的是GIF或JPEG格式的圖像文件。需Applet加載圖像只需首先定義Image對(duì)象,然后使用getImage()方法把圖像和文件結(jié)合起來即可。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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年高中英語Unit2Healthyeating單元同步復(fù)習(xí)學(xué)案新人教版必修3
- 高中歷史第七單元蘇聯(lián)的社會(huì)主義建設(shè)第21課戰(zhàn)后的經(jīng)濟(jì)改革與挫折史料解讀素材北師大版必修2
- 2024-2025學(xué)年新教材高中英語Unit3DiverseCulturesSectionⅠListeningandSpeakingReadingandThinking學(xué)案含解析新人教版必修第三冊(cè)
- 2025屆高考英語詞匯串記與閱讀訓(xùn)練十二
- 2024年新教材高中地理第五章環(huán)境與發(fā)展第二節(jié)走向人地協(xié)調(diào)-可持續(xù)發(fā)展演練含解析新人教版必修2
- 網(wǎng)絡(luò)運(yùn)營及維護(hù)指南
- 網(wǎng)絡(luò)營銷工具開發(fā)與運(yùn)營合同
- 網(wǎng)絡(luò)科技公司產(chǎn)品研發(fā)與市場(chǎng)推廣預(yù)案
- 眼鏡店驗(yàn)光配鏡服務(wù)合同
- 2024年度安川機(jī)器人工程師資格培訓(xùn)
- 某部營房改造裝修施工組織設(shè)計(jì)
- PDCA化療藥物規(guī)范化使用率報(bào)告
- 順豐快遞薪酬管理案例分析
- 路面彎沉溫度修正系數(shù)
- 【護(hù)理論文】護(hù)理論文范文(共40篇)
- 2023腿式機(jī)器人性能及試驗(yàn)方法
- 乳膠漆墻面施工方案范本
- Scratch在小學(xué)數(shù)學(xué)中的應(yīng)用-以《長方形的周長》為例
- 化工企業(yè)停工方案范本
- 網(wǎng)絡(luò)傳播法規(guī)(自考14339)復(fù)習(xí)必備題庫(含答案)
- 民法典合同編解讀之合伙合同
評(píng)論
0/150
提交評(píng)論