java課程設計鐘表(含代碼)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  Java程序課程設計</p><p><b>  任 務 書</b></p><p><b>  鐘表的設計與開發(fā)</b></p><p><b>  主要內容:</b></p><p><b>  創(chuàng)建一個鐘表。</b><

2、/p><p>  借助swing類和接口內部類的實現,在本程序中以實現Runnable接口內部類的形式創(chuàng)建多線程對象。</p><p>  Runnable接口只定義了一個run()方法,所以調用start和sleep()方法時,必須創(chuàng)建Thread實例化對象。Interrupt()方法的作用是中斷線程。其作用方式是:多線程對象.interrupt()。</p><p>

3、;  具體要求(包括技術要求等):</p><p><b>  系統的功能要求:</b></p><p>  1.可以記錄時間的鐘表。</p><p>  2.熟悉JAVA中swing的組件運用,基本工具的熟練掌握。</p><p>  學習并掌握以下技術:Java等。</p><p>  熟練使

4、用以下開發(fā)工具:JCreator + JDK 1.6.0_02 等 實現系統上述的功能。</p><p><b>  進度安排:</b></p><p>  12月28日 ~ 12月 29日:課程設計選題,查找參考資料 </p><p>  12月29日 ~ 1月2日: 完成程序代碼的編寫</p><p>

5、;  1月2日 ~ 1月3日:系統測試與完善</p><p>  1月4日 ~ 1月5日:完成課程設計報告,準備答辯</p><p><b>  主要參考文獻</b></p><p>  [1]張帆.Java范例開發(fā)大全[M].北京:清華大學出版社,2010:0-831.</p><p>  [2]耿祥義,張躍平

6、.Java大學實用教程[M].北京電子工業(yè)出版社,2008:213-216</p><p><b>  摘要</b></p><p>  隨著經濟全球化的發(fā)展,推動生活節(jié)奏的加快,也給時間賦予了更重要的意義?;诜奖闳藗兏玫恼莆諘r間,我們小組設計出了這個小時鐘。</p><p>  本時鐘是一個基于Java語言設計而成的一個小程序,目的是顯示

7、時間,并且能調準時鐘。整個程序從符合操作簡便、界面友好、靈活使用的要求出發(fā),完成調用、調整的全過程。</p><p>  本課程設計報告介紹了時鐘的構成,論述了目標功能模塊;給出了時鐘設計的步驟,程序主要所用到的Swing組件以及graphics方法。 </p><p><b>  關鍵詞:時鐘, </b></p><p><b> 

8、 目 錄</b></p><p><b>  摘要III</b></p><p><b>  目 錄IV</b></p><p><b>  第1章 引言1</b></p><p>  1.1課程設計內容1</p><p>  1.2

9、 任務分工1</p><p>  第2章 時鐘的設計2</p><p>  2.1時鐘功能的概述2</p><p>  2.1.1時鐘數字顯示2</p><p>  2.1.2時鐘指針顯示2</p><p>  2.1.2時鐘的設置2</p><p>  第3章 時鐘的具體實現3&

10、lt;/p><p><b>  3.1界面設計3</b></p><p>  3.1.1程序流程圖3</p><p>  3.1.1顯示數字時鐘效果3</p><p>  3.1.2顯示指針時鐘完全效果圖4</p><p>  3.1.3設置窗口效果圖6</p><p&g

11、t;<b>  第4章 結束語8</b></p><p><b>  致謝8</b></p><p><b>  附錄 源代碼9</b></p><p><b>  第1章 引言</b></p><p><b>  1.1課程設計內容<

12、;/b></p><p>  本時鐘編寫時用到了Java中的Swing組件以及graphics方法,并具有下列處理功能(1)顯示時鐘功能</p><p>  顯示鐘表時間和數字時間</p><p><b>  (2)狀態(tài)的可切換</b></p><p>  通過調整框圖的大小,可以在數字時鐘和指針時鐘之間進行切換。

13、</p><p> ?。?)可隨時更改時鐘時間</p><p>  可以通過左下方的設置時間,即可更改顯示時間及日歷。</p><p><b>  1.2 任務分工</b></p><p><b>  第2章 時鐘的設計</b></p><p>  2.1時鐘功能的概述<

14、;/p><p>  本時鐘不但可以顯示數字時鐘和鐘表時鐘,還可以通過調整框圖的大小,可以在數字時鐘和指針時鐘之間進行切換。</p><p>  2.1.1時鐘數字顯示</p><p>  運行程序后,可以直接看到數字型的時鐘</p><p>  2.1.2時鐘指針顯示</p><p>  由于打開程序框的框圖太小,無法清晰

15、顯示指針,我們將指針放在大框圖下顯示</p><p>  2.1.2時鐘的設置</p><p>  本程序可以通過點擊左下標的設置鍵進行調整校對時鐘,同時還可以顯示日歷項</p><p>  第3章 時鐘的具體實現</p><p><b>  3.1界面設計</b></p><p>  界面設計中

16、有用到swing組件的Button,</p><p>  3.1.1程序流程圖 </p><p>  3.1.1顯示數字時鐘效果</p><p><b>  部分代碼:</b></p><p>  //在窗體上顯示時間</p><p>  String st;</p><p

17、>  if(nowh<10) st="0"+nowh;else st=""+nowh;</p><p>  if(nows%2==0) st+=" ";else st+=":";</p><p>  if(nowm<10) st+="0"+nowm;else st+=now

18、m;</p><p>  g.setColor(getBackground());</p><p>  g.fillRect(L,T,120,100);</p><p>  g.setFont(new Font("Digital",Font.PLAIN,44));</p><p>  g.setColor(new Colo

19、r(0,255,0,55));</p><p>  g.drawString("88:88",L+15,T+57);</p><p>  g.setColor(Color.white);</p><p>  g.drawString(st,L+15,T+57);</p><p><b>  //在窗體顯示秒數&l

20、t;/b></p><p>  3.1.2顯示指針時鐘完全效果圖</p><p><b>  部分代碼:</b></p><p><b>  //繪制圖像</b></p><p>  public void paint(Graphics g){</p><p><

21、b>  //參數定義區(qū)</b></p><p>  Graphics2D g2D = (Graphics2D)g;</p><p>  Insets insets = getInsets();</p><p>  int L = insets.left/2,T = insets.top/2;//L和T分別是窗口邊緣寬度的一半</p>

22、<p>  h = getSize().height;w = getSize().width;//h為窗口高度 </p><p>  g2D.setColor(Color.white);//設置前景色為白色</p><p>  r=h/2-L-T-5;//計算半徑r的值</p><p>  x0=130+r-5+L;//計算圓心坐標</p>

23、<p>  y0=h/2+T-L;</p><p><b>  int fs;</b></p><p>  //調整窗口大小使合適</p><p>  if(h<100) h=100;</p><p>  this.setSize(x0+r+2*L+5,h);</p><p>  

24、if(h>150) set.setLocation(2,h-60);</p><p>  else set.setLocation(0,350);</p><p><b>  //獲取當前時間</b></p><p>  Calendar now= new GregorianCalendar();</p><p>

25、  int nowh= now.get(Calendar.HOUR_OF_DAY);</p><p>  int nowm= now.get(Calendar.MINUTE);</p><p>  int nows= now.get(Calendar.SECOND);</p><p>  int noww= now.get(Calendar.DAY_OF_WEEK)

26、;</p><p>  //繪制時鐘上的59個點</p><p><b>  ang=-90;</b></p><p>  if (h<150){</p><p>  if (nows==0){</p><p>  g.setColor(Color.black);</p>&l

27、t;p>  g.fillRect(L+120,T,w-120,h);</p><p><b>  }</b></p><p>  g2D.setStroke(new BasicStroke(1f));</p><p>  for(int i=1;i<=nows;i++){</p><p>  x=(int)(

28、(r-3)*Math.cos(RAD*ang)+x0);</p><p>  y=(int)((r-3)*Math.sin(RAD*ang)+y0);</p><p>  g.setColor(Color.white);</p><p>  g.drawLine(x,y,x,y);</p><p>  ang+=(360.0/59.0);&l

29、t;/p><p><b>  }</b></p><p><b>  }</b></p><p>  //繪制時鐘上的60個點</p><p><b>  else {</b></p><p>  g2D.setStroke(new BasicStroke(

30、(1+h/100)/2));</p><p>  for(int i=1;i<=60;i++){</p><p>  x=(int)((r-3)*Math.cos(RAD*ang)+x0);</p><p>  y=(int)((r-3)*Math.sin(RAD*ang)+y0);</p><p>  g.setColor(Color

31、.white);</p><p>  g.drawLine(x,y,x,y);</p><p><b>  ang-=6;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //繪制時鐘上的12個

32、點</p><p><b>  ang=60;</b></p><p>  g2D.setStroke(new BasicStroke(1+h/100));</p><p>  for(int i=1;i<=12;i++){</p><p>  x=(int)((r)*Math.cos(RAD*ang)+x0);&

33、lt;/p><p>  y=(int)((r)*Math.sin(RAD*ang)+y0);</p><p>  g.drawLine(x,y,x,y);</p><p><b>  ang-=30;</b></p><p><b>  }</b></p><p>  3.1.3

34、設置窗口效果圖</p><p><b>  部分代碼:</b></p><p>  set.addActionListener(new ActionListener(){//按鈕添加監(jiān)聽</p><p>  public void actionPerformed(ActionEvent e){</p><p><b

35、>  try {</b></p><p>  Process p=Runtime.getRuntime().exec( "control.exe Timedate.cpl");//調用Windows時間設置 </p><p><b>  }</b></p><p>  catch(Exception m

36、){}</p><p><b>  }</b></p><p><b>  });</b></p><p><b>  第4章 結束語</b></p><p>  本程序基本完成了實驗要求包括時鐘的顯示、數字日期的顯示、秒表的設定并能完美的進行時間的任意設定。在代碼的編寫過程中

37、錯遇到的大困難有兩個:一是對于鐘表的繪制,開始利用graphics對鐘表進行繪制。至此,程序已能完成各項基本要求的功能,我得意之處在時間的設定,該方法雖然笨,但是很實用!但是不足之處在于秒表停止之后再點擊Start不能繼續(xù)計時,即秒表只能使用一次,要解決這個問題,應該要參考更多線程方面的書本。為使程序更美觀,還可以對界面的背景設置圖片,為時鐘增加聲音,甚至添加鬧鐘功能,以使程序更完善,使用上更人性化。</p><p&

38、gt;<b>  致謝</b></p><p><b>  附錄 源代碼</b></p><p>  import javax.swing.*;</p><p>  import java.awt.event.ActionListener;</p><p>  import java.awt.eve

39、nt.ActionEvent;</p><p>  import java.awt.event.KeyEvent;</p><p>  import java.awt.*;</p><p>  import java.util.Calendar;</p><p>  import java.util.GregorianCalendar;<

40、;/p><p>  import java.io.*;</p><p>  class Clock extends JFrame{</p><p><b>  //參數定義區(qū)</b></p><p>  int x,y,x0,y0,r,h,w,olds_x=-100,olds_y,oldm_x,oldm_y,oldh_x,o

41、ldh_y,hh,old_h;//x0,y0圓心</p><p>  double ang,mm,ss,old_m;</p><p>  final double RAD=Math.PI/180;//定義弧度、角度轉換常數</p><p>  JButton set;//"設置"按鈕</p><p>  Icon icon

42、;//按鈕圖片</p><p>  //Clock構造方法</p><p>  public Clock(){</p><p>  super("時鐘");// 窗口標題“時鐘”</p><p>  setDefaultCloseOperation(EXIT_ON_CLOSE);//定義窗口“關閉按鈕”事件為關閉窗口<

43、;/p><p>  setSize(250,100);//設置窗口初始大小</p><p>  setBackground(new Color(0,0,0,255));//設置背景顏色為黑色</p><p>  setLocation(300,100);//設置窗口初始位置</p><p>  setResizable(true);//窗口大小可

44、調</p><p>  setVisible(true);//窗口可見</p><p>  this.setLayout(null);//設置布局為空</p><p>  icon=new ImageIcon("set.png");</p><p>  set=new JButton(icon);</p>&

45、lt;p>  set.setMnemonic(KeyEvent.VK_ALT);//設置按鈕快捷鍵為:“Alt”</p><p>  set.setSize(20,20);//按鈕大小</p><p><b>  add(set);</b></p><p>  set.addActionListener(new ActionListene

46、r(){//按鈕添加監(jiān)聽</p><p>  public void actionPerformed(ActionEvent e){</p><p><b>  try {</b></p><p>  Process p=Runtime.getRuntime().exec( "control.exe Timedate.cpl&qu

47、ot;);//調用Windows時間設置 </p><p><b>  }</b></p><p>  catch(Exception m){}</p><p><b>  }</b></p><p><b>  });</b></p><p>  //

48、添加計時器 時間間隔為0.1s</p><p>  int delay = 100;</p><p>  ActionListener drawClock = new ActionListener(){</p><p>  public void actionPerformed(ActionEvent evt){</p><p>  repa

49、int();//重畫界面</p><p><b>  }</b></p><p><b>  };</b></p><p>  new Timer(delay,drawClock).start();</p><p><b>  }</b></p><p>

50、;<b>  //繪制圖像</b></p><p>  public void paint(Graphics g){</p><p><b>  //參數定義區(qū)</b></p><p>  Graphics2D g2D = (Graphics2D)g;</p><p>  Insets insets

51、 = getInsets();</p><p>  int L = insets.left/2,T = insets.top/2;//L和T分別是窗口邊緣寬度的一半</p><p>  h = getSize().height;w = getSize().width;//h為窗口高度 </p><p>  g2D.setColor(Color.white);//設置

52、前景色為白色</p><p>  r=h/2-L-T-5;//計算半徑r的值</p><p>  x0=130+r-5+L;//計算圓心坐標</p><p>  y0=h/2+T-L;</p><p><b>  int fs;</b></p><p>  //調整窗口大小使合適</p>

53、;<p>  if(h<100) h=100;</p><p>  this.setSize(x0+r+2*L+5,h);</p><p>  if(h>150) set.setLocation(2,h-60);</p><p>  else set.setLocation(0,350);</p><p><b

54、>  //獲取當前時間</b></p><p>  Calendar now= new GregorianCalendar();</p><p>  int nowh= now.get(Calendar.HOUR_OF_DAY);</p><p>  int nowm= now.get(Calendar.MINUTE);</p>&l

55、t;p>  int nows= now.get(Calendar.SECOND);</p><p>  int noww= now.get(Calendar.DAY_OF_WEEK);</p><p>  //繪制時鐘上的59個點</p><p><b>  ang=-90;</b></p><p>  if (h

56、<150){</p><p>  if (nows==0){</p><p>  g.setColor(Color.black);</p><p>  g.fillRect(L+120,T,w-120,h);</p><p><b>  }</b></p><p>  g2D.setStro

57、ke(new BasicStroke(1f));</p><p>  for(int i=1;i<=nows;i++){</p><p>  x=(int)((r-3)*Math.cos(RAD*ang)+x0);</p><p>  y=(int)((r-3)*Math.sin(RAD*ang)+y0);</p><p>  g.se

58、tColor(Color.white);</p><p>  g.drawLine(x,y,x,y);</p><p>  ang+=(360.0/59.0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //繪制時鐘上

59、的60個點</p><p><b>  else {</b></p><p>  g2D.setStroke(new BasicStroke((1+h/100)/2));</p><p>  for(int i=1;i<=60;i++){</p><p>  x=(int)((r-3)*Math.cos(RAD*a

60、ng)+x0);</p><p>  y=(int)((r-3)*Math.sin(RAD*ang)+y0);</p><p>  g.setColor(Color.white);</p><p>  g.drawLine(x,y,x,y);</p><p><b>  ang-=6;</b></p>&l

61、t;p><b>  }</b></p><p><b>  }</b></p><p>  //繪制時鐘上的12個點</p><p><b>  ang=60;</b></p><p>  g2D.setStroke(new BasicStroke(1+h/100));&

62、lt;/p><p>  for(int i=1;i<=12;i++){</p><p>  x=(int)((r)*Math.cos(RAD*ang)+x0);</p><p>  y=(int)((r)*Math.sin(RAD*ang)+y0);</p><p>  g.drawLine(x,y,x,y);</p><

63、;p><b>  ang-=30;</b></p><p><b>  }</b></p><p>  //在窗體上顯示時間</p><p>  String st;</p><p>  if(nowh<10) st="0"+nowh;else st="&q

64、uot;+nowh;</p><p>  if(nows%2==0) st+=" ";else st+=":";</p><p>  if(nowm<10) st+="0"+nowm;else st+=nowm;</p><p>  g.setColor(getBackground());</p

65、><p>  g.fillRect(L,T,120,100);</p><p>  g.setFont(new Font("Digital",Font.PLAIN,44));</p><p>  g.setColor(new Color(0,255,0,55));</p><p>  g.drawString("88

66、:88",L+15,T+57);</p><p>  g.setColor(Color.white);</p><p>  g.drawString(st,L+15,T+57);</p><p><b>  //在窗體顯示秒數</b></p><p>  fs=r/9+17;//計算字體大小</p>

67、<p>  g.drawLine(L+120+10,T+10,L+120+10,T+10);</p><p>  if(nows<10) st="0"+nows;else st=""+nows;</p><p>  g.setColor(new Color(0,0,0));</p><p>  g.fill

68、Rect(x0-fs/2,2*r/3+y0-3*fs/4,fs,3*fs/4);</p><p>  g.setFont(new Font("Digital",Font.PLAIN,fs));</p><p>  g.setColor(new Color(255,255,255,55));</p><p>  g.drawString("

69、;88",x0-fs/2,2*r/3+y0);</p><p>  g.setColor(Color.white);</p><p>  g.drawString(st,x0-fs/2,2*r/3+y0);</p><p>  g.drawLine(L+120+10,T+10,L+120+10,T+10);</p><p><

70、b>  //顯示AM、PM</b></p><p>  if(nowh<12) st="AM";else st="PM";</p><p>  g.setColor(new Color(0,0,0));</p><p>  g.fillRect(x0-fs/2,y0-2*r/3,fs,3*fs/4);&

71、lt;/p><p>  g.setFont(new Font("IrisUPC",Font.BOLD,fs));</p><p>  g.setColor(Color.white);</p><p>  g.drawString(st,x0-fs/2,y0-2*r/3+3*fs/4);</p><p><b>  /

72、/顯示星期</b></p><p>  switch (noww)</p><p><b>  {</b></p><p>  case 1: st="Sunday";break;</p><p>  case 2: st="Monday";break;</p&g

73、t;<p>  case 3: st="Tuesday";break;</p><p>  case 4: st="Wednesday";break;</p><p>  case 5: st="Tursday";break;</p><p>  case 6: st="Friday

74、";break;</p><p>  case 7: st="Saturday";break;</p><p><b>  }</b></p><p><b>  fs=25;</b></p><p>  g.setColor(new Color(0,0,0));<

75、;/p><p>  g.fillRect(2*L+15,T+75,fs,3*fs/4);</p><p>  g.setFont(new Font("Computerfont",Font.BOLD,fs));</p><p>  g.setColor(Color.white);</p><p>  g.drawString(s

76、t,2*L+15,T+75+fs);</p><p>  //計算時間與度數的關系</p><p>  if(h>=150){</p><p>  ss=90-nows*6;</p><p>  mm=90-nowm*6-(0.1*nows);</p><p>  hh=90-nowh*30-nowm/2;<

77、;/p><p>  g.setColor(new Color(255,255,255));</p><p>  g.fillOval(x0-2-h/150,y0-2-h/150,4+h/75,4+h/75);</p><p><b>  //擦除秒針</b></p><p>  g2D.setStroke(new Basic

78、Stroke(1f));</p><p>  if(olds_x>0){</p><p>  g.setColor(getBackground());</p><p>  g.drawLine(x0,y0,olds_x,2*y0-olds_y);</p><p><b>  }</b></p><

79、;p><b>  else{</b></p><p>  old_m = mm;</p><p>  old_h = hh;</p><p><b>  }</b></p><p><b>  //繪制秒針</b></p><p>  x=(int

80、)(r*0.9*Math.cos(RAD*ss))+x0;</p><p>  y=(int)(r*0.9*Math.sin(RAD*ss))+y0;</p><p>  g.setColor(Color.white);</p><p>  g.drawLine(x0,y0,x,2*y0-y);</p><p><b>  olds

81、_x=x;</b></p><p><b>  olds_y=y;</b></p><p>  g2D.setStroke(new BasicStroke(1.5f));</p><p><b>  //擦除分針</b></p><p>  if(old_m!=mm){</p>

82、;<p>  g.setColor(getBackground());</p><p>  g.drawLine(x0,y0,oldm_x,2*y0-oldm_y);</p><p><b>  }</b></p><p><b>  //繪制分針</b></p><p>  x=(i

83、nt)(r*0.7*Math.cos(RAD*mm))+x0;</p><p>  y=(int)(r*0.7*Math.sin(RAD*mm))+y0;</p><p>  g.setColor(Color.white);</p><p>  g.drawLine(x0,y0,x,2*y0-y);</p><p><b>  ol

84、dm_x=x;</b></p><p><b>  oldm_y=y;</b></p><p><b>  old_m=mm;</b></p><p>  g2D.setStroke(new BasicStroke(2f));</p><p><b>  //擦除時針</

85、b></p><p>  if(old_h!=hh){</p><p>  g.setColor(getBackground());</p><p>  g.drawLine(x0,y0,oldh_x,2*y0-oldh_y);</p><p><b>  }</b></p><p><

86、;b>  //繪制時針</b></p><p>  x=(int)(r*0.5*Math.cos(RAD*hh))+x0;</p><p>  y=(int)(r*0.5*Math.sin(RAD*hh))+y0;</p><p>  g.setColor(Color.white);</p><p>  g.drawLine

87、(x0,y0,x,2*y0-y);</p><p><b>  oldh_x=x;</b></p><p><b>  oldh_y=y;</b></p><p><b>  old_h=hh;</b></p><p><b>  } </b>

88、;</p><p><b>  }</b></p><p><b>  //主方法</b></p><p>  public static void main(String[] args){</p><p>  Clock c = new Clock();//創(chuàng)建一個Clock對象</p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論