模擬時鐘課程設(shè)計報告_第1頁
模擬時鐘課程設(shè)計報告_第2頁
模擬時鐘課程設(shè)計報告_第3頁
模擬時鐘課程設(shè)計報告_第4頁
模擬時鐘課程設(shè)計報告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計報告課程: 面向?qū)ο蟪绦蛟O(shè)計 學(xué)號:1210461018 1210461027 1210461050 姓名: 張揚(yáng) 李佳珂 金正行 班級: 12計科2班 教師: 錢 田 芬 時間: 2014年12月10日 計算機(jī)科學(xué)與技術(shù)系設(shè)計名稱:模擬時鐘日期:2014年1 2月 10日設(shè)計內(nèi)容:通過多線程技術(shù),重繪界面,繪制一個虛擬的時鐘,時鐘界面包括表盤和指針。并用數(shù)字表顯示當(dāng)前的時間。1 設(shè)計目的與要求1.1基本要求編寫一個模擬時鐘程序,此程序在屏幕中間有一指針式鐘面。左上角以數(shù)字方式顯示時間,該時間應(yīng)與指針顯示的時間一致,且與機(jī)器系統(tǒng)時間相同。在設(shè)計的過程中,需要用到awt組件和Swing容

2、器與組件,布局管理器,事件處理,繪制圖形,還運(yùn)用到了類的繼承,事件監(jiān)聽器和線程。掌握J(rèn)DK、Editplus、Eclipse、JCreator等開發(fā)工具的運(yùn)用,拓寬常用類庫的應(yīng)用。增進(jìn)Java語言編輯基本功,1.2 設(shè)計目的設(shè)計一個帶有指針、數(shù)字時鐘,并且具有秒表功能,能方便我們的使用和操作,為我們以后的使用創(chuàng)造一個良好的平臺。把自己所學(xué)的理論知識運(yùn)用到實(shí)際操作中去,以此來發(fā)現(xiàn)自己的不足,及時的改正。在實(shí)際的操作中學(xué)習(xí)及運(yùn)用還沒有學(xué)過的知識。最后在調(diào)試與測試的過程還可以提升自己的改錯能力也是自己經(jīng)驗的積累!2 設(shè)計環(huán)境、思想和功能描述2.1運(yùn)行環(huán)境:Eclipse +JDK平臺

3、60;            CPU:Pentium 2.8GHz以上 內(nèi)存:256MB以上 硬盤空間:80G以上 操作系統(tǒng):Windows XP Windows 7 Windows 82.2主要設(shè)計思想:先是利用構(gòu)造函數(shù)創(chuàng)建一個長為200,寬為200的窗體,顏色設(shè)置為black,并把窗體設(shè)計為固定大小。利用AWT繪制圖形的方法,在窗體中間畫一個圓,并且繪制時鐘上的12個數(shù)字,然后利用Calendar類提供

4、的HOUR,MINUTE和SECOND 方法獲得現(xiàn)在的時間,在計算時間和度數(shù)的關(guān)系;在利用AWT繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。在利用drawString在窗體的左上角顯示出當(dāng)前的時間。2.3功能描述:設(shè)計的時鐘界面良好,比較簡潔美觀,程序有很強(qiáng)的實(shí)用性,實(shí)現(xiàn)程序與電腦的時間的同步。可以顯示時鐘,可以顯示具體的數(shù)字時間,也可以顯示分針秒針。3 設(shè)計方案的具體論證3.1詳細(xì)設(shè)計3.1.1 界面及布局設(shè)計先是利用構(gòu)造函數(shù)創(chuàng)建一個長為200,寬為200的窗體,顏色設(shè)置為black,并把窗體設(shè)計為固定大小。 利用AWT繪制圖形的方法,在窗體中間畫一個圓,并且繪制時鐘上的12個數(shù)

5、字,然后利用Calendar類提供的HOUR,MINUTE,SECOND方法獲得現(xiàn)在的時間,在計算時間和度數(shù)的關(guān)系;在利用AWT繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。 3.1.2 類、方法類名: Clock  作用: 自定義主類,對鼠標(biāo)拖拽的初始界面進(jìn)行聲明 類名: ClockPain 作用:用來畫時鐘和指針繼承的父類: JComponent類 實(shí)現(xiàn)的接口: 沒有表 1-成員變量ClockPaint成員變量成員變量描述變量類型名稱時針StringH分針StringM秒針Stri

6、ngS表 2-方法表ClockPaint方法方法名功能備注get(Calendar.SECOND)獲得秒數(shù)接口方法get(Calendar.MINUTE)獲得分鐘接口方法get(Calendar.HOUR_OF_DAY)獲得小時接口方法Paint()畫圖Run()運(yùn)行程序3.2 概要設(shè)計啟動時鐘創(chuàng)建一個主窗體利用AWT繪制圖形方法在窗體繪制一個圓,并繪制好12個數(shù)字計算出時間和度數(shù)的關(guān)系繪制出各指針關(guān)閉時鐘時針走時分針走時秒針走時程序流程圖定義子類:ClockPaint 繼承的父類名:JPanel 繼承的接口名:Runnable int h, 

7、m, s                           / 小時,分鐘,秒 主要成員方法:  s = now.get(Calendar.SECOND) * 6    / 獲得秒轉(zhuǎn)換成度

8、數(shù) m = now.get(Calendar.MINUTE) * 6    / 獲得分鐘 h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30+ now.get(Calendar.MINUTE) / 12 * 6    / 獲得小時 主要成員方法:/清屏 super.pa

9、int(g) g.setColor(Color.BLACK) g.fillRect(0, 0, r * 3, r * 3)       / 畫圓 g.setColor(Color.WHITE) g.drawOval(x, y, r * 2, r * 2)       &

10、#160;/ 秒針 g.setColor(Color.RED) int x1 = (int) (r - 10) * Math.sin(rad * s) int y1 = (int) (r - 10) * Math.cos(rad * s) g.drawLine(x + r, y + r, 

11、x + r + x1, y + r - y1)    / 分針 g.setColor(Color.BLUE) x1 = (int) (r - r / 2.5) * Math.sin(rad * m) y1 = (int) (r - r / 2.5)&

12、#160;* Math.cos(rad * m) g.drawLine(x + r, y + r, x + r + x1, y + r - y1)    / 時針 g.setColor(Color.CYAN) x1 = (int) (r - r / 1.5) 

13、* Math.sin(rad * h) y1 = (int) (r - r / 1.5) * Math.cos(rad * h) g.drawLine(x + r, y + r, x + r + x1, y + r - y1)    / 數(shù)

14、字 g.setColor(Color.YELLOW) int d = 29 for (int i = 1; i <= 12; i+)                      3.3 程序說明先是利用構(gòu)造函數(shù)創(chuàng)建一個長為200,寬為2

15、00的窗體,顏色設(shè)置為black,并把窗體設(shè)計為固定大小。利用AWT繪制圖形的方法,在窗體中間畫一個圓,并且繪制時鐘上的12個數(shù)字,然后利用Calendar類提供的HOUR,MINUTE,SECOND方法獲得現(xiàn)在的時間,在計算時間和度數(shù)的關(guān)系;在利用AWT繪制圖形的方法繪制出各指針,并設(shè)置不同的顏色。在利用drawString在窗體的左上方畫出和時鐘相對數(shù)字時間。在設(shè)計的過程中,需要用到Swing組件和Swing容器與組件,布局管理器,事件處理,繪制圖形,還運(yùn)用到了類的繼承,事件監(jiān)聽器和線程。 “GregorianCalendar()”用于顯示當(dāng)前時間;“setColor”用于顯示時針、分針和

16、表盤的顏色;“Color numberColor” 用于顯示秒針和數(shù)字的顏色, “drawOval(x, y, r * 2, r * 2)”用Graphics算法來畫圓,其中(x,y)是圓的中心,r為圓半徑;“public void paint(Graphics g)”用于運(yùn)行時程序;   “public void start()” threat的啟動方法; “public void run()” 線程的run方法。run( )方法就是分出去讓程

17、序同時運(yùn)行的、用來處理休眠和重畫圖形的線程。4 設(shè)計結(jié)果與分析4.1設(shè)計結(jié)果 當(dāng)程序正常運(yùn)行的時候,它能清晰的顯示時鐘界面。默認(rèn)為與系統(tǒng)時間同步,如果出現(xiàn)錯誤,就會進(jìn)行歸零。運(yùn)行界面如圖4.2設(shè)計分析 使用的方法:在Clock的源代碼的編寫過程中運(yùn)用了paint( )、repaint( )、run( )等方法。時鐘的繪制采用雙緩沖圖形處理機(jī)制,即先在緩沖區(qū)內(nèi)繪制圖形,再把圖形顯示到框架上。時鐘的不斷繪制是通過一個線程不斷讀取系統(tǒng)時間,如果時間有變化即繪制。 調(diào)試方法:首先我是一個類一個類的完成,在每一個類完成后都會對它進(jìn)行編譯,待它能

18、正常的編譯之后在進(jìn)行下面的類的編寫。在編譯的過程中會有一些錯誤,比如說語法錯誤,類的引用格式不正確,會產(chǎn)生一些異常。但是在經(jīng)過慢慢的調(diào)試,這些問題逐漸得到解決遇到的問題和解決方法:在用JAVA編寫程序時,我遇到了很多困難,對很多的接口,類,方法都不是很熟悉,只好采用查看API文檔,一個一個進(jìn)行對照學(xué)習(xí),同時也上網(wǎng)查看了有關(guān)模擬時鐘的相關(guān)描述,還向同學(xué)請教了,翻閱了相關(guān)的書籍。附錄:程序代碼import java.awt.Color;import java.awt.Graphics;import java.awt.event.WindowAdapter;import java.awt.event

19、.WindowEvent;import java.text.DateFormat;import java.util.Calendar;import java.util.GregorianCalendar;import javax.swing.JFrame;import javax.swing.JPanel;public class Clock extends JFrame private static final long serialVersionUID = 1L; public Clock (int r) ClockPaint cp = new ClockPaint (r); this.a

20、dd(cp); this.setSize(300,210); this.setResizable(false); this.setLocation(260, 120); this.setTitle("小時鐘"); this.setVisible(true); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public static void main(String s) new Clock (70); class ClockP

21、aint1 extends JPanel implements Runnable private static final long serialVersionUID = 1L; int x, y, r; /上邊距,左邊距,鐘面半徑 int h, m, s; / 時針,分針,秒針對應(yīng)的度數(shù) double rad = Math.PI / 180; /角度1°所對應(yīng)的弧度 public ClockPaint1(int r) this.x = r/3; this.y = r/3; this.r = r; Calendar now = new GregorianCalendar(); s =

22、 now.get(Calendar.SECOND) * 6;/ m = now.get(Calendar.MINUTE) * 6;/ h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6; Thread t = new Thread(this); t.start(); public void paint(Graphics g) /清屏 super.paint(g); g.setColor(Color.black); g.fillRect(0, 0, 300, r*3);/填充矩形,參數(shù)

23、分別為左上角頂點(diǎn)橫、縱坐標(biāo),寬、高 / 畫圓 g.setColor(Color.WHITE); g.drawOval(x, y, r * 2, r * 2);/參數(shù)分別為矩形的左上角頂點(diǎn)橫、縱坐標(biāo),矩形寬,矩形高(矩形內(nèi)切橢圓) / 秒針 g.setColor(Color.RED); int x1 = (int) (r - 10) * Math.sin(rad * s);/r-10為秒針的長度,x軸朝右,y軸朝下 int y1 = (int) (r - 10) * Math.cos(rad * s); g.drawLine(x + r, y + r, x + r + x1, y + r - y

24、1);/畫直線, 前2參數(shù)表起點(diǎn)坐標(biāo),后2參數(shù)表終點(diǎn)坐標(biāo) / 分針 g.setColor(Color.BLUE); x1 = (int) (r - r / 2.5) * Math.sin(rad * m);/ y1 = (int) (r - r / 2.5) * Math.cos(rad * m); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 時針 g.setColor(Color.CYAN); x1 = (int) (r - r / 1.5) * Math.sin(rad * h); y1 = (int) (r - r / 1.5)

25、 * Math.cos(rad * h); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); / 數(shù)字 int d = 30;/時鐘刻度數(shù)從1開始,角度的基線是“00”秒時的秒鐘,刻度1的夾角為30° for (int i = 1; i <= 12; i+) x1 = (int) (r - 10) * Math.sin(rad * d);/刻度數(shù)橫坐標(biāo) y1 = (int) (r - 10) * Math.cos(rad * d);/刻度數(shù)縱坐標(biāo) (rad * d):表示的是弧度 g.drawString(i + "&

26、quot; , x + r + x1 - 4 , x + r - y1 + 5 ); d += 30; / 小點(diǎn) d = 0; for (int i = 0; i < 60; i+) /循環(huán)繪出60個刻度點(diǎn) x1 = (int) (r - 2) * Math.sin(rad * d);/刻度點(diǎn)橫坐標(biāo) (r - 2):距圓面向內(nèi)縮進(jìn)2像素畫點(diǎn); y1 = (int) (r - 2) * Math.cos(rad * d);/刻度點(diǎn)縱坐標(biāo) (rad * d):表示的是弧度 g.drawString(".", x + r + x1 - 1 , x + r - y1 + 1)

27、;/后2個參數(shù)表示橫縱坐標(biāo),即從該坐標(biāo)處畫“.” d += 6; /一個圓360度,每隔6度畫一個點(diǎn),共60個點(diǎn) / 顯示時間 Calendar now1 = new GregorianCalendar(); int hour = now1.get(Calendar.HOUR_OF_DAY);/小時,獲得當(dāng)前的時刻 int minute = now1.get(Calendar.MINUTE);/分,同上 int second = now1.get(Calendar.SECOND);/秒 g.setColor(Color.pink); g.drawString(hour<10?"

28、0":"")+hour+ ":" + (minute<10?"0":"")+minute+ ":" + (second<10?"0":"")+second, 200, 85);/drawString使用當(dāng)前畫筆的顏色和字體,將參數(shù)str的內(nèi)容顯示出來,并且最 /左邊的字符的基線從坐標(biāo)x,y開始 Calendar now2 = new GregorianCalendar(); DateFormat f=DateFormat.getDat

29、eInstance(DateFormat.FULL);/獲取當(dāng)前日期的完整格式 g.setColor(Color.pink); g.drawString(f.format(now2.getTime(), 162, 130); /實(shí)現(xiàn)接口Runnable的方法run,用來刷新時分秒三指針的度數(shù) public void run() while (true) try Thread.sleep(1000);/休眠一秒 catch (Exception ex) s += 6; if(s % 360=0) m += 6; if(m % 72=0) h += 6; this.repaint(); 設(shè)計建議與

30、體會首先,java作為一種計算機(jī)語言,它具備語言的特性,就是我們在課堂上認(rèn)真聽取了老師的指導(dǎo)之后,還得自己回去認(rèn)真看書寫程序,并且上機(jī)實(shí)習(xí)才能發(fā)現(xiàn)問題及時解決問題。就像我們學(xué)習(xí)語言一樣要通過和同學(xué)之間的交流才能提高我們的實(shí)際應(yīng)用能力。所以,我們在自己認(rèn)真刻苦學(xué)習(xí)的同時,一定要多和同學(xué)老師交流,從他們那里吸取好的思維方式、好的學(xué)習(xí)方法。 對于課程設(shè)計,基本上實(shí)現(xiàn)了模擬時鐘程序的要求,指針式鐘面,左上角有數(shù)字時間,與系統(tǒng)顯示的時間一致。該設(shè)計的特點(diǎn)是時鐘上標(biāo)有12數(shù)字個刻度,且每一分鐘的位置都一個刻度,并且各指針是不同的顏色,看上去比較美觀,在左上方顯示數(shù)字時間,這是為了能更好的看時間。

31、但是功能還不完善,沒有實(shí)現(xiàn)對于時間的重置。 我想在不斷地進(jìn)行對該設(shè)計的完善,不僅能為該時鐘設(shè)置背景,以增加該時鐘的美觀效果,也可以對時鐘到了一定的時間就可以報時,并且可以設(shè)置鬧鐘,為鬧鐘設(shè)置多種音樂,可供選擇,這樣的話就不顯得單調(diào),這樣一來該時鐘更方便實(shí)用。也能對自己的動手能力有所提高。在完成課程設(shè)計的過程中,遇到了不少的問題:一是有一些東西自己沒有學(xué)過;二是在編寫的過程中由于思路不清晰以及自己的粗心給自己制造了一些麻煩,還有就是會產(chǎn)生一些異常。但是在經(jīng)過自己和搭檔、同學(xué)的交流,以及自己查閱資料和API文檔,針對性的對不懂得問題進(jìn)行查詢,自己沒有學(xué)過但是又要用到得逐漸的得到解決,再經(jīng)

32、過自己反復(fù)的理清思路和反復(fù)的檢查,由思路不清晰和粗心帶來的麻煩也慢慢得到了解決。最后Java作為一個面向?qū)ο蟮木幊陶Z言,在圖像方面具有很強(qiáng)的實(shí)現(xiàn)能力。這樣很能激發(fā)我的學(xué)習(xí)興趣。在編寫程序的時候發(fā)現(xiàn),雖然它是一個面向?qū)ο蟮木幊陶Z言,我們一定要學(xué)會如何編寫多個類和方法,在不斷地摸索中培養(yǎng)我們自身設(shè)計面向?qū)ο蠼鉀Q方案的能力。作為學(xué)生的我們,是一個學(xué)習(xí)的過程,我們應(yīng)該學(xué)習(xí)如何寫好程序。而好的程序不僅僅是一系列語句的拼湊,我們要聯(lián)系自身實(shí)際,用編程語言解決問題和實(shí)施解決問題的方案。在以后的日子里,我要不斷地學(xué)習(xí)這個博大精深的語言,繼續(xù)不斷的深化自己的實(shí)際動手能力。金 正 行面向?qū)ο笳n程設(shè)計這兩周來,通過對所選題目程序的詳細(xì)分析和更改,受益匪淺。讓我了解到了Java更多的實(shí)用功能

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論