JAVA课程设计钟表(含代码).doc

上传人:土8路 文档编号:10359291 上传时间:2021-05-11 格式:DOC 页数:17 大小:233.50KB
返回 下载 相关 举报
JAVA课程设计钟表(含代码).doc_第1页
第1页 / 共17页
JAVA课程设计钟表(含代码).doc_第2页
第2页 / 共17页
JAVA课程设计钟表(含代码).doc_第3页
第3页 / 共17页
JAVA课程设计钟表(含代码).doc_第4页
第4页 / 共17页
JAVA课程设计钟表(含代码).doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《JAVA课程设计钟表(含代码).doc》由会员分享,可在线阅读,更多相关《JAVA课程设计钟表(含代码).doc(17页珍藏版)》请在三一文库上搜索。

1、JavaJava程序课程设计程序课程设计 任任 务务 书书 钟表的设计与开发钟表的设计与开发 1 1、主要内容:主要内容: 创建一个钟表。 借助swing类和接口内部类的实现,在本程序中以实现Runnable接口内部类 的形式创建多线程对象。 Runnable接口只定义了一个run()方法,所以调用start和sleep()方法时 ,必须创建Thread实例化对象。Interrupt()方法的作用是中断线程。其作 用方式是:多线程对象.interrupt()。 2 2、具体要求(包括技术要求等):具体要求(包括技术要求等): 系统的功能要求:系统的功能要求: 1.可以记录时间的钟表。 2.熟悉

2、JAVA中swing的组件运用,基本工具的熟练掌握。 学习并掌握以下技术:学习并掌握以下技术:JavaJava等。 熟练使用以下开发工具:熟练使用以下开发工具:JCreator + JDK 1.6.0_02 等 实现系统上述的功能。实现系统上述的功能。 3 3、进度安排:进度安排: 12月28日 12月 29日:课程设计选题,查找参考资料 12月29日 1月2日: 完成程序代码的编写 1月2日 1月3日:系统测试与完善 1月4日 1月5日:完成课程设计报告,准备答辩 4 4、主要参考文献主要参考文献 1张帆.Java范例开发大全M.北京:清华大学出版社,2010:0-831. 2耿祥义,张跃平

3、.Java大学实用教程M.北京电子工业出版社,2008:213-216 摘要摘要 随着经济全球化的发展,推动生活节奏的加快,也给时间赋予了更重要的意 义。基于方便人们更好的掌握时间,我们小组设计出了这个小时钟。 本时钟是一个基于Java语言设计而成的一个小程序,目的是显示时间,并且 能调准时钟。整个程序从符合操作简便、界面友好、灵活使用的要求出发,完成 调用、调整的全过程。 本课程设计报告介绍了时钟的构成,论述了目标功能模块;给出了时钟设计 的步骤,程序主要所用到的Swing组件以及graphics方法。 关键词关键词:时钟, 目目 录录 摘要摘要.III 目目 录录.IV 第第1章章 引言引

4、言 .1 1.1课程设计内容.1 1.2 任务分工.1 第第2章章 时钟的设计时钟的设计 .2 2.1时钟功能的概述.2 2.1.1时钟数字显示.2 2.1.2时钟指针显示.2 2.1.2时钟的设置.2 第第3章章 时钟的具体实现时钟的具体实现 .3 3.1界面设计.3 3.1.1程序流程图.3 3.1.1显示数字时钟效果显示数字时钟效果 .3 3.1.2显示指针时钟完全效果图显示指针时钟完全效果图 .4 3.1.3设置窗口效果图设置窗口效果图 .6 第第4章章 结束语结束语 .8 致谢致谢 .8 附录附录 源代码源代码 .9 第第1章章 引言引言 1.11.1课程设计内容课程设计内容 本时钟

5、编写时用到了Java中的Swing组件以及graphics方法,并具有下列处理功能 (1)显示时钟功能 显示钟表时间和数字时间 (2)状态的可切换 通过调整框图的大小,可以在数字时钟和指针时钟之间进行切换。 (3)可随时更改时钟时间 可以通过左下方的设置时间,即可更改显示时间及日历。 1.21.2 任务分工任务分工 第第2章章 时钟的设计时钟的设计 2.12.1时钟功能的概述时钟功能的概述 本时钟不但可以显示数字时钟和钟表时钟,还可以通过调整框图的大小,可以在 数字时钟和指针时钟之间进行切换。 2.1.1时钟数字显示时钟数字显示 运行程序后,可以直接看到数字型的时钟 2.1.2时钟指针显示时钟

6、指针显示 由于打开程序框的框图太小,无法清晰显示指针,我们将指针放在大框图下显示 2.1.2时钟的设置时钟的设置 本程序可以通过点击左下标的设置键进行调整校对时钟,同时还可以显示日历项 第第3章章 时钟的时钟的具体实现具体实现 3.13.1界面设计界面设计 界面设计中有用到swing组件的Button, 3.1.1程序流程图程序流程图 3.1.1显示数字时钟效果显示数字时钟效果 部分代码: /在窗体上显示时间 String st; if(nowh10) st=0+nowh;else st=+nowh; if(nows%2=0) st+= ;else st+=:; if(nowm10) st+=

7、0+nowm;else st+=nowm; g.setColor(getBackground(); g.fillRect(L,T,120,100); 开始 Main() Clock() repaint( ) paint() drawclock() g.setFont(new Font(Digital,Font.PLAIN,44); g.setColor(new Color(0,255,0,55); g.drawString(88:88,L+15,T+57); g.setColor(Color.white); g.drawString(st,L+15,T+57); /在窗体显示秒数 3.1.2显

8、示指针时钟完全效果图显示指针时钟完全效果图 部分代码: /绘制图像 public void paint(Graphics g) /参数定义区 Graphics2D g2D = (Graphics2D)g; Insets insets = getInsets(); int L = insets.left/2,T = insets.top/2;/L和T分别是窗口边缘宽度的一半 h = getSize().height;w = getSize().width;/h为窗口高度 g2D.setColor(Color.white);/设置前景色为白色 r=h/2-L-T-5;/计算半径r的值 x0=130

9、+r-5+L;/计算圆心坐标 y0=h/2+T-L; int fs; /调整窗口大小使合适 if(h150) set.setLocation(2,h-60); else set.setLocation(0,350); /获取当前时间 Calendar now= new GregorianCalendar(); int nowh= now.get(Calendar.HOUR_OF_DAY); int nowm= now.get(Calendar.MINUTE); int nows= now.get(Calendar.SECOND); int noww= now.get(Calendar.DAY_

10、OF_WEEK); /绘制时钟上的59个点 ang=-90; if (h150) if (nows=0) g.setColor(Color.black); g.fillRect(L+120,T,w-120,h); g2D.setStroke(new BasicStroke(1f); for(int i=1;i=nows;i+) x=(int)(r-3)*Math.cos(RAD*ang)+x0); y=(int)(r-3)*Math.sin(RAD*ang)+y0); g.setColor(Color.white); g.drawLine(x,y,x,y); ang+=(360.0/59.0)

11、; /绘制时钟上的60个点 else g2D.setStroke(new BasicStroke(1+h/100)/2); for(int i=1;i=60;i+) x=(int)(r-3)*Math.cos(RAD*ang)+x0); y=(int)(r-3)*Math.sin(RAD*ang)+y0); g.setColor(Color.white); g.drawLine(x,y,x,y); ang-=6; /绘制时钟上的12个点 ang=60; g2D.setStroke(new BasicStroke(1+h/100); for(int i=1;i=12;i+) x=(int)(r)

12、*Math.cos(RAD*ang)+x0); y=(int)(r)*Math.sin(RAD*ang)+y0); g.drawLine(x,y,x,y); ang-=30; 3.1.3设置窗口效果图设置窗口效果图 部分代码: set.addActionListener(new ActionListener()/按钮添加监听 public void actionPerformed(ActionEvent e) try Process p=Runtime.getRuntime().exec( control.exe Timedate.cpl);/调用Windows时间设置 catch(Excep

13、tion m) ); 第第4章章 结束语结束语 本程序基本完成了实验要求包括时钟的显示、数字日期的显示、秒表的设定 并能完美的进行时间的任意设定。在代码的编写过程中错遇到的大困难有两个: 一是对于钟表的绘制,开始利用graphics对钟表进行绘制。至此,程序已能完成各 项基本要求的功能,我得意之处在时间的设定,该方法虽然笨,但是很实用!但 是不足之处在于秒表停止之后再点击Start不能继续计时,即秒表只能使用一次, 要解决这个问题,应该要参考更多线程方面的书本。为使程序更美观,还可以对 界面的背景设置图片,为时钟增加声音,甚至添加闹钟功能,以使程序更完善, 使用上更人性化。 致谢致谢 附录附录

14、 源代码源代码 import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.*; import java.util.Calendar; import java.util.GregorianCalendar; import java.io.*; class Clock extends JFrame /参数定义区 int x,y,x0,y0,r,h,w,olds_x=- 10

15、0,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,hh,old_h;/x0,y0圆心 double ang,mm,ss,old_m; final double RAD=Math.PI/180;/定义弧度、角度转换常数 JButton set;/设置按钮 Icon icon;/按钮图片 /Clock构造方法 public Clock() super(时钟);/ 窗口标题“时钟” setDefaultCloseOperation(EXIT_ON_CLOSE);/定义窗口“关闭按钮”事件为 关闭窗口 setSize(250,100);/设置窗口初始大小 setBackgrou

16、nd(new Color(0,0,0,255);/设置背景颜色为黑色 setLocation(300,100);/设置窗口初始位置 setResizable(true);/窗口大小可调 setVisible(true);/窗口可见 this.setLayout(null);/设置布局为空 icon=new ImageIcon(set.png); set=new JButton(icon); set.setMnemonic(KeyEvent.VK_ALT);/设置按钮快捷键为:“Alt” set.setSize(20,20);/按钮大小 add(set); set.addActionListen

17、er(new ActionListener()/按钮添加监听 public void actionPerformed(ActionEvent e) try Process p=Runtime.getRuntime().exec( control.exe Timedate.cpl);/调用Windows时间设置 catch(Exception m) ); /添加计时器 时间间隔为0.1s int delay = 100; ActionListener drawClock = new ActionListener() public void actionPerformed(ActionEvent

18、evt) repaint();/重画界面 ; new Timer(delay,drawClock).start(); /绘制图像 public void paint(Graphics g) /参数定义区 Graphics2D g2D = (Graphics2D)g; Insets insets = getInsets(); int L = insets.left/2,T = insets.top/2;/L和T分别是窗口边缘宽度的一半 h = getSize().height;w = getSize().width;/h为窗口高度 g2D.setColor(Color.white);/设置前景色

19、为白色 r=h/2-L-T-5;/计算半径r的值 x0=130+r-5+L;/计算圆心坐标 y0=h/2+T-L; int fs; /调整窗口大小使合适 if(h150) set.setLocation(2,h-60); else set.setLocation(0,350); /获取当前时间 Calendar now= new GregorianCalendar(); int nowh= now.get(Calendar.HOUR_OF_DAY); int nowm= now.get(Calendar.MINUTE); int nows= now.get(Calendar.SECOND);

20、int noww= now.get(Calendar.DAY_OF_WEEK); /绘制时钟上的59个点 ang=-90; if (h150) if (nows=0) g.setColor(Color.black); g.fillRect(L+120,T,w-120,h); g2D.setStroke(new BasicStroke(1f); for(int i=1;i=nows;i+) x=(int)(r-3)*Math.cos(RAD*ang)+x0); y=(int)(r-3)*Math.sin(RAD*ang)+y0); g.setColor(Color.white); g.drawL

21、ine(x,y,x,y); ang+=(360.0/59.0); /绘制时钟上的60个点 else g2D.setStroke(new BasicStroke(1+h/100)/2); for(int i=1;i=60;i+) x=(int)(r-3)*Math.cos(RAD*ang)+x0); y=(int)(r-3)*Math.sin(RAD*ang)+y0); g.setColor(Color.white); g.drawLine(x,y,x,y); ang-=6; /绘制时钟上的12个点 ang=60; g2D.setStroke(new BasicStroke(1+h/100);

22、for(int i=1;i=12;i+) x=(int)(r)*Math.cos(RAD*ang)+x0); y=(int)(r)*Math.sin(RAD*ang)+y0); g.drawLine(x,y,x,y); ang-=30; /在窗体上显示时间 String st; if(nowh10) st=0+nowh;else st=+nowh; if(nows%2=0) st+= ;else st+=:; if(nowm10) st+=0+nowm;else st+=nowm; g.setColor(getBackground(); g.fillRect(L,T,120,100); g.s

23、etFont(new Font(Digital,Font.PLAIN,44); g.setColor(new Color(0,255,0,55); g.drawString(88:88,L+15,T+57); g.setColor(Color.white); g.drawString(st,L+15,T+57); /在窗体显示秒数 fs=r/9+17;/计算字体大小 g.drawLine(L+120+10,T+10,L+120+10,T+10); if(nows10) st=0+nows;else st=+nows; g.setColor(new Color(0,0,0); g.fillRec

24、t(x0-fs/2,2*r/3+y0-3*fs/4,fs,3*fs/4); g.setFont(new Font(Digital,Font.PLAIN,fs); g.setColor(new Color(255,255,255,55); g.drawString(88,x0-fs/2,2*r/3+y0); g.setColor(Color.white); g.drawString(st,x0-fs/2,2*r/3+y0); g.drawLine(L+120+10,T+10,L+120+10,T+10); /显示AM、PM if(nowh=150) ss=90-nows*6; mm=90-now

25、m*6-(0.1*nows); hh=90-nowh*30-nowm/2; g.setColor(new Color(255,255,255); g.fillOval(x0-2-h/150,y0-2-h/150,4+h/75,4+h/75); /擦除秒针 g2D.setStroke(new BasicStroke(1f); if(olds_x0) g.setColor(getBackground(); g.drawLine(x0,y0,olds_x,2*y0-olds_y); else old_m = mm; old_h = hh; /绘制秒针 x=(int)(r*0.9*Math.cos(R

26、AD*ss)+x0; y=(int)(r*0.9*Math.sin(RAD*ss)+y0; g.setColor(Color.white); g.drawLine(x0,y0,x,2*y0-y); olds_x=x; olds_y=y; g2D.setStroke(new BasicStroke(1.5f); /擦除分针 if(old_m!=mm) g.setColor(getBackground(); g.drawLine(x0,y0,oldm_x,2*y0-oldm_y); /绘制分针 x=(int)(r*0.7*Math.cos(RAD*mm)+x0; y=(int)(r*0.7*Mat

27、h.sin(RAD*mm)+y0; g.setColor(Color.white); g.drawLine(x0,y0,x,2*y0-y); oldm_x=x; oldm_y=y; old_m=mm; g2D.setStroke(new BasicStroke(2f); /擦除时针 if(old_h!=hh) g.setColor(getBackground(); g.drawLine(x0,y0,oldh_x,2*y0-oldh_y); /绘制时针 x=(int)(r*0.5*Math.cos(RAD*hh)+x0; y=(int)(r*0.5*Math.sin(RAD*hh)+y0; g.setColor(Color.white); g.drawLine(x0,y0,x,2*y0-y); oldh_x=x; oldh_y=y; old_h=hh; /主方法 public static void main(String args) Clock c = new Clock();/创建一个Clock对象

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1