基于java的圖片查看器設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)_第1頁(yè)
基于java的圖片查看器設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)_第2頁(yè)
基于java的圖片查看器設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)_第3頁(yè)
基于java的圖片查看器設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)_第4頁(yè)
基于java的圖片查看器設(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

成績(jī) 課程設(shè)計(jì)報(bào)告題目 面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì) 課 程 名 稱 基于java的圖片查看器設(shè)計(jì) 院 部 名 稱 專 業(yè) 班 級(jí) 學(xué) 生 姓 名 學(xué) 號(hào) 課程設(shè)計(jì)地點(diǎn) 課程設(shè)計(jì)學(xué)時(shí) 指 導(dǎo) 教 師 課程設(shè)計(jì)題目: 基于java的科學(xué)計(jì)算器設(shè)計(jì) 一、摘要(所進(jìn)行設(shè)計(jì)工作的主旨、緣起、目的,設(shè)計(jì)工作的主要內(nèi)容、過程,采用的方法及取得的成果。關(guān)鍵字(Key Words):一般35個(gè),最能代表報(bào)告內(nèi)容特征,或在報(bào)告起關(guān)鍵作用,最能說(shuō)明問題的詞組)主旨:進(jìn)一步掌握java的面向?qū)ο蟮某绦蛟O(shè)計(jì)緣起:在學(xué)習(xí)了java的面向?qū)ο蟮某绦蛟O(shè)計(jì)后,學(xué)校開了java的課程設(shè)計(jì)課,正好進(jìn)一步掌握java的圖形用戶界面設(shè)計(jì)。目的:設(shè)計(jì)一個(gè)基于java的科學(xué)計(jì)算器關(guān)鍵字:java面向?qū)ο?科學(xué)計(jì)算器 圖形用戶界面二、目錄目 錄1、課程設(shè)計(jì)概述42、系統(tǒng)功能描述43、系統(tǒng)需求分析與設(shè)計(jì)43.1 系統(tǒng)需求分析43.2 系統(tǒng)設(shè)計(jì)43.2.1 系統(tǒng)總體設(shè)計(jì)43.2.2 程序詳細(xì)設(shè)計(jì)54、系統(tǒng)測(cè)試和使用說(shuō)明84.1 系統(tǒng)測(cè)試84.2 系統(tǒng)使用說(shuō)明105、課程設(shè)計(jì)總結(jié)105.1 遇到的問題和解決方法105.2 心得體會(huì)10參考文獻(xiàn)10附錄1150三、前言(說(shuō)明本次課程設(shè)計(jì)課題意義,本課題相關(guān)技術(shù)特點(diǎn)、擬采用的方案或路線)該程序是一個(gè)圖形界面的簡(jiǎn)單的 java 計(jì)算器,使用人員能快捷簡(jiǎn)單地進(jìn)行 操作.即時(shí)準(zhǔn)確地獲得需要的計(jì)算的結(jié)果,充分降低了數(shù)字計(jì)算的難度和節(jié)約了 時(shí)間,對(duì)人們的生活有一定的幫助.可以進(jìn)行簡(jiǎn)單的四則運(yùn)算(加,減,乘,除, 以及求倒數(shù),求相反數(shù)) ,有退格功能, 歸零 表示初始化,界面顏色為灰白,該 程序支持鍵盤操作。隨著科學(xué)技術(shù)的不斷發(fā)展, 計(jì)算機(jī)已經(jīng)成為我們工作學(xué)習(xí)和生活中不可缺少 的工具.文本編輯器是個(gè)人計(jì)算機(jī)最司空見慣的應(yīng)用程序了,在學(xué)習(xí)了 Java 語(yǔ) 言之后,我決定使用 Java 語(yǔ)言編寫一個(gè)簡(jiǎn)單的計(jì)算器,可以實(shí)現(xiàn)簡(jiǎn)單的運(yùn)算功 能,滿足日?;镜墓ぷ鲗W(xué)習(xí)和娛樂需要. Java 是由 Sun 公司開發(fā)的新一代純面向?qū)ο蟮木W(wǎng)絡(luò)編程語(yǔ)言.其目標(biāo)是建 立一種在任意種機(jī)器, 任一種操作系統(tǒng)的網(wǎng)絡(luò)環(huán)境中運(yùn)行的軟件, 實(shí)行所謂的 程 序?qū)懸淮?到處運(yùn)行的目標(biāo).正因?yàn)槿绱?Java 已成為當(dāng)今 Internet 上最流 行,最受歡迎的一種程序開發(fā)語(yǔ)言.Java 開發(fā)小組把 Java 按特性分為基本版,移動(dòng)版,企業(yè)版,每個(gè)版本有一 個(gè)軟件開發(fā)包. Java 基本版本叫 Java 2 標(biāo)準(zhǔn)版 (Java 2 Standard Edition,J2SE) , 它包含建立 Java 應(yīng)用程序或者是 Applet 所需的應(yīng)用程序編程接口(API) .Java 2 移動(dòng)版(The Java 2 Mobile Edition,J2ME)包含創(chuàng)建無(wú)線 Java 應(yīng)用程序的 API.還有 Java 2 企業(yè)版(The Java 2 Enterprise,J2EE)是 J2SE 的增強(qiáng)版本, 包含建立多層架構(gòu)應(yīng)用程序 API。四、正文(包含所進(jìn)行設(shè)計(jì)的整體內(nèi)容)圖片查看器1、課程設(shè)計(jì)概述為提高學(xué)生理論與實(shí)踐相結(jié)合的能力,計(jì)電學(xué)院于2009年6月開展了為期兩周的面向?qū)ο笳n程設(shè)計(jì),針對(duì)對(duì)象為07級(jí)全體計(jì)科專業(yè)學(xué)生。本次實(shí)踐教學(xué)采用學(xué)生集中在學(xué)校網(wǎng)絡(luò)機(jī)房上機(jī),指導(dǎo)老師指導(dǎo)的形式。要求學(xué)生用所學(xué)的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言JAVA來(lái)編寫程序,實(shí)現(xiàn)特定功能,以加深對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)這個(gè)概念的理解。2、系統(tǒng)功能描述本次設(shè)計(jì)的圖片查看器實(shí)現(xiàn)了在用戶選定的文件目錄下循環(huán)瀏覽指定后綴的圖片文件,并且可以對(duì)選擇的圖片進(jìn)行放大,縮小,左旋,右旋,另存,徹底刪除等操作。3、系統(tǒng)需求分析與設(shè)計(jì)3.1 系統(tǒng)需求分析隨著數(shù)字產(chǎn)品漸進(jìn)人們的生活,網(wǎng)絡(luò)通信技術(shù)、圖像處理技術(shù)以及多媒體技術(shù)的發(fā)展,越來(lái)越多的用戶希望能夠?qū)σ延械臄?shù)字圖片進(jìn)行查看并能夠?qū)崿F(xiàn)簡(jiǎn)單的操作。本圖片查看器以其簡(jiǎn)潔明了易操作的特點(diǎn)實(shí)現(xiàn)圖片查看的基本功能,從而也就滿足了用戶的基本要求。3.2 系統(tǒng)設(shè)計(jì)3.2.1 系統(tǒng)總體設(shè)計(jì)(1)系統(tǒng)功能分析本系統(tǒng)要用到以下的Java編程技術(shù)實(shí)現(xiàn)的功能:圖像顯示功能:客戶需要顯示圖片,這將由圖像顯示功能來(lái)完成。顯示圖片的時(shí)候,用到了雙緩沖技術(shù)來(lái)消除閃爍問題。(2)類圖系統(tǒng)中用到了一些基本類、實(shí)現(xiàn)了一些接口。系統(tǒng)所用到的類如圖1所示:PicViewerActionListenerJpanelJLabelJButtonImageBufferedImageGraphics2DStringJfilechooseAppletJava.awt.*Javax.swing.*Java.io.*Java.applet.*extendsimplementimport圖1 系統(tǒng)類圖3.2.2 程序詳細(xì)設(shè)計(jì)(1)程序中引用的類JPanel類程序中定義了三個(gè)Jpanel類分別是:pathBar, picContainer, ctrBar。用于圖片查看器的整體布局。其中pathBar為頂部路徑欄,picContainer為圖片顯示區(qū)域,ctrBar為底部控制欄。JLabel類程序中定義了類名為pathInfo的JLabel類,用于實(shí)現(xiàn)頂部路徑欄,底部控制欄按鈕的文字顯示。JButton類程序中定義了多個(gè)JButton類:openbtn, prebtn, nextbtn, zoominbtn, zoomoutbtn, oripicbtn, angleleftbtn, anglerightbtn,exitbtn,deletebtn,sav;為查看器的按鈕。Image 類程序中定義了名為pic的Image類用于對(duì)被查看的圖片的操作。BufferedImage 類此類為用于顯示的緩沖區(qū)圖像。在對(duì)圖像進(jìn)行操作前,都先將圖片讀進(jìn)預(yù)設(shè)的緩沖區(qū),然后再顯示在用戶前端,這樣雖然速度慢了點(diǎn),但很好的消除了圖片閃爍效果。Graphics2D 類此類與上面的BufferedImage類共同作用,通過運(yùn)用雙緩沖技術(shù)很好的消除屏閃問題。String類程序中運(yùn)用了三個(gè)不同的String類,從而實(shí)現(xiàn)了需要查看的圖片的路徑的操作,并且在啟動(dòng)圖片查看器時(shí),圖片的路徑能夠在路徑欄顯示出來(lái)。同時(shí)還設(shè)置了String 數(shù)組用于存儲(chǔ)用戶選定的目錄下所有指定格式的圖片,這樣可以實(shí)現(xiàn)循環(huán)瀏覽圖片等操作。(2)程序的構(gòu)造方法及其實(shí)現(xiàn)因?yàn)閳D片查看器可以實(shí)現(xiàn)對(duì)圖片不同的操作,程序中構(gòu)造了十多個(gè)方法以達(dá)到其目的。各構(gòu)造方法相互聯(lián)系共同完成圖片查看器的各項(xiàng)功能。各個(gè)方法描述如下:public void init()本方法實(shí)現(xiàn)了對(duì)圖片查看器的界面的整體布局及按鈕的初始化。對(duì)頁(yè)面的總體布局采用了以下主要代碼進(jìn)行實(shí)現(xiàn):setLayout(new BorderLayout();add(pathBar, BorderLayout.NORTH); add(picContainer, BorderLayout.CENTER); add(ctrBar, BorderLayout.SOUTH); resize(640, 400);設(shè)置頂部路徑欄,及其文字顯示;代碼如pathBar = new JPanel();pathBar.setLayout(new BorderLayout();pathInfo.setText(圖片查看器); pathBar.add(pathInfo);同時(shí)對(duì)圖片顯示區(qū)域,底部的控制欄的設(shè)置也運(yùn)用了相似的代碼進(jìn)行實(shí)現(xiàn),在此就不再重復(fù)。各按鈕除了“打開”一按鈕外,其他的各按鈕均設(shè)置為false。這是因?yàn)橹挥小按蜷_”圖片后才能進(jìn)行以下的像循環(huán)瀏覽,旋轉(zhuǎn),刪除等操作。具體方法的實(shí)現(xiàn)見附件。public void actionPerformed(ActionEvent)在本方法中主要實(shí)現(xiàn)了用戶對(duì)底部控制欄各按鈕的點(diǎn)擊后,圖片查看器進(jìn)行的相對(duì)應(yīng)的操作反應(yīng)。方法中一開始用JButton click = (JButton) e.getSource();獲取按鍵源,然后根據(jù)click與程序設(shè)定的已知的類進(jìn)行比較決定進(jìn)行相應(yīng)的反應(yīng)。if(click = openbtn);if(click = prebtn & pic != null);等一系列進(jìn)行判斷后,進(jìn)行或是打開文件open()方法的調(diào)用;或是pre()方法的調(diào)用;其他各操作也大同小異,在此就不再贅述。方法的詳細(xì)代碼見附件。public void open()該方法實(shí)現(xiàn)了對(duì)用戶選定的文件路徑下的后綴為.jpg的圖片文件的打開操作。同時(shí)能夠?qū)υ撀窂较碌囊磺蟹蠗l件的文件進(jìn)行跟蹤處理。方法中的核心在于一個(gè)過濾操作:FileNameExtensionFilter filter = new FileNameExtensionFilter(*.JPG, jpg);這樣就能實(shí)現(xiàn).jpg文件的瀏覽了。在選定了圖片后,相應(yīng)的按鈕值應(yīng)該被賦值為ture,以便進(jìn)行其他的操作。若沒有選定圖片則顯示“沒有選擇圖片”。public void save() throws IOException該方法是為了滿足用戶希望對(duì)圖片進(jìn)行另外存儲(chǔ)的操作,通過用戶自己的選擇重新選定圖片的存儲(chǔ)路徑。詳細(xì)實(shí)現(xiàn)見附件中代碼。 public void pre()及public void next()Pre與next方法實(shí)現(xiàn)了對(duì)當(dāng)前圖片的上一張下一張的瀏覽。因?yàn)樵诘谝淮未蜷_文件時(shí)就將該路徑下所有符合要求的圖片存儲(chǔ)在String pics中。通過if(i = 0) i = pics.length-1; else i -;其中i為當(dāng)前的圖片位置數(shù)。通過dir = path + + picsi;獲得文件的路徑,然后調(diào)用loadImage(dir);此方法將在后面介紹;與上面的方法相對(duì)應(yīng)的是此方法實(shí)現(xiàn)了對(duì)當(dāng)前圖片下一張的瀏覽,實(shí)現(xiàn)原理與上相同,if(i = pics.length-1) i = 0; else i+;通過調(diào)用loadImage(dir);一方法實(shí)現(xiàn)。public void picTrans()如果bufImage為空則直接返回,之后進(jìn)行過濾圖像操作,2D仿射變換,設(shè)置仿射變換的比例因子transform.setToScale(scaleX, scaleY); 創(chuàng)建仿射變換操作對(duì)象,過濾圖像,將目標(biāo)圖像存在filteredBufImage中,然后顯示。public void zoomin()此方法實(shí)現(xiàn)了對(duì)當(dāng)前的圖片進(jìn)行按設(shè)置比例縮小操作。在進(jìn)行縮小操作前,先對(duì)圖片的大小進(jìn)行判斷,看是否已經(jīng)縮小到最小,若最小則顯示提示信息“已經(jīng)縮至最小!”;否則進(jìn)行縮小操作。在此過程中調(diào)用了picTrans()方法,以及repaint(); 重繪組件的方法。public void oripic()及public void delete()方法實(shí)現(xiàn)了將放大或縮小后的圖片大小還原的操作。同時(shí)也調(diào)用了picTrans()方法,以及repaint(); 重繪組件的方法。具體的picTrans()方法將在下面詳細(xì)描述。此方法具體實(shí)現(xiàn)見附件;public void delete()方法將圖片徹底刪除,刪除后圖片徹底被粉碎,回收站里面都不能找到。因此要慎用此按鈕。public void angleleft() 及public void angleright()方法每次對(duì)圖片進(jìn)行45的向左向右的旋轉(zhuǎn)操作。radius += -Math.PI / 2;用以控制,而這些操作后,每次都應(yīng)oripicbtn.setEnabled(true),也就是要將還原按鈕賦值為真。public void loadImage(String fileName) 及public void exit()前一個(gè)方法通過增加圖像到加載器中,創(chuàng)建原始緩沖區(qū)圖像,創(chuàng)建bufImage的圖形環(huán)境:bufImageG = bufImage.createGraphics();傳輸源圖像數(shù)據(jù)到緩沖區(qū)圖像中一些列的操作,對(duì)圖片進(jìn)行了加載操作;public void exit()方法是退出查看器的方法。 4、系統(tǒng)測(cè)試和使用說(shuō)明4.1 系統(tǒng)測(cè)試使用eclipse運(yùn)行程序時(shí),會(huì)出現(xiàn)applet小程序的界面。并顯示程序已啟動(dòng)。顯示如圖2: 圖2 程序開始時(shí)的界面單擊“打開”按鈕后的效果圖如圖3:圖3 選擇圖片文件多次單擊“縮小”按鈕后的效果圖如圖4:圖4 圖片縮小顯示多次單擊放大按鈕后的效果圖如圖5所示:圖5 圖片放大顯示4.2 系統(tǒng)使用說(shuō)明由于本人的能力有限在制作此圖片查看器時(shí)有許多沒能完善的地方,因此客戶在使用時(shí)應(yīng)注意慎用刪除與保存按鈕,另外其他的操作只要單擊按鈕則行。特別值得注意原始按鈕只有在對(duì)圖片已經(jīng)進(jìn)行了放大或縮小的操作后其才是有效的。5、課程設(shè)計(jì)總結(jié)5.1 遇到的問題和解決方法在用JAVA編寫程序時(shí),我遇到了很多困難,對(duì)很多的接口,類,方法都不是很熟悉,只好采用查看API文檔,一個(gè)一個(gè)進(jìn)行對(duì)照學(xué)習(xí),同時(shí)也上網(wǎng)查看了有關(guān)圖片查看器的相關(guān)描述,還向同學(xué)請(qǐng)教了,翻閱了相關(guān)的書籍。尤其是因?yàn)橛行┓椒ㄐ枰褂肑DK1.6才行,所以在學(xué)校網(wǎng)絡(luò)機(jī)房一開始不能運(yùn)行,在安裝了1.6版本后運(yùn)行正常了。另外文件在打開時(shí)會(huì)有嚴(yán)重的頻閃問題,在重寫了public void update(Graphics g) this.paint(g);后解決了。5.2 心得體會(huì)在這次的面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)中,我進(jìn)一步熟悉了上一學(xué)期學(xué)習(xí)的JAVA語(yǔ)言中的包,類,方法:導(dǎo)入哪些包,繼承哪些類可以實(shí)現(xiàn)什么方法等。深刻感受到了面向?qū)ο笳Z(yǔ)言中類庫(kù)的強(qiáng)大功能。但是由于自己掌握的知識(shí)有限,圖片查看器的功能沒有做到盡善盡美,尤其是刪除操作,刪除掉以后就沒了,在回收站也找不到。還有就是單擊“保存”按鈕后似乎就不能進(jìn)行其他操作,但這樣的情況或有或無(wú)。通過這次的課程設(shè)計(jì),我懂得了要充分利用網(wǎng)絡(luò)資源查找資料同時(shí)要多向同學(xué)請(qǐng)教,大家互相討論進(jìn)步得會(huì)很快。通過近兩周多的努力,這次課程設(shè)計(jì)圓滿的結(jié)束了,在這個(gè)過程中,我收獲了很多的知識(shí),同時(shí)也非常感謝杭志老師幫助與指導(dǎo)。在以后的學(xué)習(xí)中,我會(huì)更加努力的學(xué)好專業(yè)知識(shí),并將所學(xué)知識(shí)用于實(shí)踐當(dāng)中去,以便牢固掌握知識(shí)。參考文獻(xiàn)1葉核亞 java 程序設(shè)計(jì)實(shí)用教程(第四版) 電子工業(yè)出版社2百度文庫(kù) 5.2算法實(shí)現(xiàn)package mypackage;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.text.DecimalFormat;import javax.swing.BorderFactory;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JCheckBoxMenuItem;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JRadioButtonMenuItem;import javax.swing.JTextField;public class Counter extends JFrame private JTextField tf;private JPanel panel1, panel2, panel3, panel4;private JMenuBar myBar;private JMenu menu1, menu2, menu3;private JMenuItem editItem1, editItem2, help1, help2, help3;private JRadioButtonMenuItem seeItem1, seeItem2;/單選框private JCheckBoxMenuItem seeItem3;/復(fù)選框private ButtonGroup bgb;private String back;private boolean IfResult = true, flag = false;private String oper = =;private double result = 0;private Num numActionListener;private DecimalFormat df;public Counter()super(科學(xué)計(jì)算器);/設(shè)置標(biāo)題欄df = new DecimalFormat(#.#);/保留十位小數(shù)this.setLayout(new BorderLayout(10, 5);panel1 = new JPanel(new GridLayout(1, 3, 10, 10);panel2 = new JPanel(new GridLayout(5, 6, 5, 5);/5行6列panel3 = new JPanel(new GridLayout(5, 1, 5, 5);panel4 = new JPanel(new BorderLayout(5, 5);/* * 菜單欄 */myBar = new JMenuBar();menu1 = new JMenu(編輯(E);menu2 = new JMenu(查看(V);menu3 = new JMenu(幫助(H);menu1.setFont(new Font(宋體, Font.PLAIN, 12);menu2.setFont(new Font(宋體, Font.PLAIN, 12);menu3.setFont(new Font(宋體, Font.PLAIN, 12);/* * 編輯欄 */editItem1 = new JMenuItem(復(fù)制(C) Ctrl+C);editItem2 = new JMenuItem(粘貼(P) Ctrl+V);editItem1.setFont(new Font(宋體,Font.PLAIN,12);editItem2.setFont(new Font(宋體,Font.PLAIN,12);/* * 查看欄 */seeItem1 = new JRadioButtonMenuItem(科學(xué)型(T);seeItem2 = new JRadioButtonMenuItem(標(biāo)準(zhǔn)型(S);seeItem3 = new JCheckBoxMenuItem(數(shù)字分組(I);seeItem1.setFont(new Font(宋體,Font.PLAIN,12);seeItem2.setFont(new Font(宋體,Font.PLAIN,12);seeItem3.setFont(new Font(宋體,Font.PLAIN,12);/* * 幫助欄 */help1 = new JMenuItem(幫助主題(H);help2 = new JMenuItem(關(guān)于計(jì)算器(A);help1.setFont(new Font(宋體,Font.PLAIN,12);help2.setFont(new Font(宋體,Font.PLAIN,12);bgb = new ButtonGroup();/選項(xiàng)組menu1.add(editItem1);menu1.add(editItem2);menu2.add(seeItem1);menu2.add(seeItem2);menu2.addSeparator();/添加一條分割線menu2.add(seeItem3);menu3.add(help1);menu3.addSeparator();/添加一條分割線menu3.add(help2);myBar.add(menu1);myBar.add(menu2);myBar.add(menu3);this.setJMenuBar(myBar);numActionListener = new Num();/實(shí)現(xiàn)數(shù)字監(jiān)聽/* * 文本域,即為計(jì)算器的屏幕顯示區(qū)域 */tf = new JTextField();tf.setEditable(false);/文本區(qū)域不可編輯tf.setBackground(Color.white);/文本區(qū)域的背景色tf.setHorizontalAlignment(JTextField.RIGHT);/文字右對(duì)齊tf.setText(0);tf.setBorder(BorderFactory.createLoweredBevelBorder();init();/對(duì)計(jì)算器進(jìn)行初始化/* * 初始化操作 * 添加按鈕 */private void init()addButton(panel1, 退格, new Clear(), Color.red);addButton(panel1, CE, new Clear(), Color.red);addButton(panel1, C, new Clear(), Color.red);addButton(panel2, 1/x, new Signs(), Color.magenta);addButton(panel2, log, new Signs(), Color.magenta);addButton(panel2, 7, numActionListener, Color.blue);addButton(panel2, 8, numActionListener, Color.blue);addButton(panel2, 9, numActionListener, Color.blue);addButton(panel2, , new Signs(), Color.red);addButton(panel3, 10n, new Signs(), Color.red);addButton(panel3, ln, new Signs(), Color.red);addButton(panel2, n!, new Signs(), Color.magenta);addButton(panel2, sqrt, new Signs(), Color.magenta);addButton(panel2, 4, numActionListener, Color.blue);addButton(panel2, 5, numActionListener, Color.blue);addButton(panel2, 6, numActionListener, Color.blue);addButton(panel2, , new Signs(), Color.red);addButton(panel2, sin, new Signs(), Color.magenta);addButton(panel2, x2, new Signs(), Color.magenta);addButton(panel2, 1, numActionListener, Color.blue);addButton(panel2, 2, numActionListener, Color.blue);addButton(panel2, 3, numActionListener, Color.blue);addButton(panel2, -, new Signs(), Color.red);addButton(panel2, cos, new Signs(), Color.magenta);addButton(panel2, x3, new Signs(), Color.magenta);addButton(panel2, 0, numActionListener, Color.blue);addButton(panel2, -/+, new Clear(), Color.blue);addButton(panel2, ., new Dot(), Color.blue);addButton(panel2, +, new Signs(), Color.red);addButton(panel2, tan, new Signs(), Color.magenta);addButton(panel2, 開立方根, new Signs(), Color.magenta);addButton(panel2, , numActionListener, Color.blue);addButton(panel2, e, numActionListener, Color.blue);addButton(panel2, , new Signs(), Color.orange);addButton(panel2, =, new Signs(), Color.red);JButton btns = new JButton(計(jì)算器);btns.setBorder(BorderFactory.createLoweredBevelBorder();btns.setEnabled(false);/按鈕不可操作btns.setPreferredSize(new Dimension(20, 20);panel3.add(btns);/加入按鈕addButton(panel3, MC, null, Color.red);addButton(panel3, MR, null, Color.red);addButton(panel3, MS, null, Color.red);addButton(panel3, M+, null, Color.red);panel4.add(panel1, BorderLayout.NORTH);panel4.add(panel2, BorderLayout.CENTER);this.add(tf, BorderLayout.NORTH);this.add(panel3, BorderLayout.WEST);this.add(panel4);pack();this.setResizable(false);/窗口不可改變大小this.setLocation(300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/* * 統(tǒng)一設(shè)置按鈕的的使用方式 * param panel * param name * param action * param color */private void addButton(JPanel panel, String name, ActionListener action, Color color)JButton bt = new JButton(name);panel.add(bt);/在面板上增加按鈕bt.setForeground(color);/設(shè)置前景(字體)顏色bt.addActionListener(action);/增加監(jiān)聽事件/* * 計(jì)算器的基礎(chǔ)操作(+ - ) * param x */private void getResult (double x)if(oper = +)result += x;else if(oper = -)result -= x;else if(oper = )result *= x;else if(oper = )result /= x;else if(oper = =)result = x;tf.setText(df.format(result);/* * 運(yùn)算符號(hào)的事件監(jiān)聽 */class Signs implements ActionListenerpublic void actionPerformed(ActionEvent e) /* * 用ActionEvent對(duì)象的getActionCommand()方法 * 取得與引發(fā)事件對(duì)象相關(guān)的字符串 */String str = e.getActionCommand();/* sqrt求平方根 */if(str.equals(sqrt)double i = Double.parseDouble(tf.getText();if(i=0)/* * String.valueOf() 轉(zhuǎn)換為字符串 * df.format() 按要求保留四位小數(shù) * Math.sqrt() 求算數(shù)平方根 */tf.setText(String.valueOf(df.format(Math.sqrt(i);elsetf.setText(負(fù)數(shù)不能開平方根);/* log求常用對(duì)數(shù) */else if(str.equals(log)double i = Double.parseDouble(tf.getText();if(i0)tf.setText(String.valueOf(df.format(Math.log10(i);elsetf.setText(負(fù)數(shù)或0不能求對(duì)數(shù));/* 開立方根 */else if(str.equals(開立方根)double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.pow(i,1.0/3);/* 1/x求倒數(shù) */else if(str.equals(1/x)if(Double.parseDouble(tf.getText() = 0)tf.setText(除數(shù)不能為零);elsetf.setText(df.format(1 / Double.parseDouble(tf.getText();/* sin求正弦函數(shù) */else if(str.equals(sin)double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.sin(i*Math.PI/180);/* cos求余弦函數(shù) */else if(str.equals(cos)double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.cos(i*Math.PI/180);/* tan求正切函數(shù) */else if(str.equals(tan)double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.tan(i*Math.PI/180);/* n!求階乘 */else if(str.equals(n!)double i = Double.parseDouble(tf.getText();if(i%2=0)|(i%2=1)/判斷為整數(shù)放進(jìn)行階乘操作int j = (int)i;/強(qiáng)制類型轉(zhuǎn)換int result=1;for(int k=1;k0)tf.setText(String.valueOf(df.format(Math.log(n);elsetf.setText(負(fù)數(shù)或0不能求自然對(duì)數(shù));/* 角度轉(zhuǎn)換 */* * 將角度值轉(zhuǎn)換成弧度值,方便三角函數(shù)的計(jì)算 */else if(str.equals()double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(i/180*Math.PI);elseif(flag)IfResult = false;if(IfResult)oper = str;else getResult(Double.parseDouble(tf.getText();oper = str;IfResult = true;/* * 清除按鈕的事件監(jiān)聽 */class Clear implements ActionListenerpublic void actionPerformed(ActionEvent e) /* * 用ActionEvent對(duì)象的getActionCommand()方法 * 取得與引發(fā)事件對(duì)象相關(guān)的字符串 */String str = e.getActionCommand();if(str = C)tf.setText(0);IfResult = true;result = 0;else if(str = -/+)double i = 0 - Double.parseDouble(tf.getText().trim();tf.setText(df.format(i);else if(str = 退格)if(Double.parseDouble(tf.getText() 0)if(tf.getText().length() 1)tf.setText(tf.getText().substring(0, tf.getText().length() - 1);/使用退格刪除最后一位字符elsetf.setText(0);IfResult = true;elseif(tf.getText().length() 2)tf.setText(tf.getText().substring(0, tf.getText().length() - 1);elsetf.setText(0);IfResult = true;else if(str = CE)tf.setText(0);IfResult = true;/* * 數(shù)字輸入的事件監(jiān)聽 */class Num implements ActionListenerpublic void actionPerformed(ActionEvent e) String str = e.getActionCommand();if(IfResult)tf.setText();IfResult = false;if(str=)tf.setText(String.valueOf(Math.PI);else if(str=e)tf.setText(String.valueOf(Math.E);elsetf.setText(tf.getText().trim() + st

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論