Java实验(SWUST 实验二 时钟应用程序设计)

实验目的

设计时钟应用程序

实验内容

1、时钟程序的总体设计。即设计时钟类(Clock),给出该类的大致结构,并分析各方法的特点,分析Applet程序或JFram程序的执行过程;
2、时钟界面的静态设计。分析如何获取图形对象,分析图形坐标系,如何通过图形对象绘制表盘、刻度、时针、分针、秒针;
3、当前系统时间的获取及绘制。说明如何获取当前系统时间(时、分、秒),如何通过图形对象绘制时针、分针、秒针;
4、时钟的动态显示。详细说明窗体定时刷新是如何实现的(包括符合需求的Timer对象的设计,TimerTask对象的设计,如何实现窗体定时刷新)。
5、测试过程、结果与结论(设计测试步骤,全面验证你的设计结果是否正确,给出测试结论)。

概要设计

需求分析过程

用户需要一个时钟,如同家里的钟表,并且能显示具体的时间。

总体设计方案

界面设计

界面需要一个时钟,和一个时间的显示。钟表需要绘制有表盘,时间刻度,并且有时针、分针、秒针。而时间显示要有当前时间的数字。

事件设计

需要设计两个事件,一个是钟表,一个是显示时间。钟表要绘制出一个表盘,也就是一个圆,然后时间刻度,要在这个圆上找出坐标并划线,之后要获取当前时间,使时针分针秒针动态地显示出当前的时间。而时间的显示在时钟的下方,就是一个时间的输出,获取当前时间并打印。

详细设计

类的设计

首先我先在clock包里new了一个类,在other里面WindowBuilder里面找到JFrame并创建
在这里插入图片描述

import导入成员java.awt.Color; java.awt.Graphics;java.util.Calendar;javax.swing.JFrame;其中java.awt.Color是用来给时针分针秒针上色;java.awt.Graphics是用来绘制图形,比如表盘的圆,刻度时针分针秒针的直线的绘制;java.util. Calendar是用来获取当前的时间,时分秒。javax.swing.JFrame是Clock继承JFrame这个类。
在这里插入图片描述

在Clock这个类里面先设定三个属性,hour,minute,secound用来记录时间,之后给出无参数的的构造方法,并在构造方法里面设定了一个400*400大小的窗口,并使窗口可视,关闭窗口结束进程。
在这里插入图片描述

之后我就开始绘制图形创建方法paint并带有参数Graphics g,super调用父类paint()方法,清空窗口中已有图像。然后设置圆心,确定圆心坐标为窗口高度和宽度的一半,设置原始画笔颜色为黑色。
在这里插入图片描述

之后进行画圆,画圆的方法我没有直接找到,就用了画椭圆的方法,参数g调用drawOval方法,这个方法是用来画椭圆的,这个方法需要四个参数前两个是椭圆左上角的位置坐标,后面两个分别是椭圆的宽度和高度,用这个方法进行画表盘和圆心。具体的圆大小的合适程度,我是带入数值具体试验出来的。
在这里插入图片描述

然后画时间刻度和数字,首先要确定刻度和数字的坐标,在这里面我注意到了计算机的x轴和y轴与角度与数学中的不同,在计算机中原点在左上角,y轴正方向是由上下的,而角度中角度的方向也顺时针来用的,我用了一个for循环来绘制十二个刻度和数字,确定坐标位置要用到三角函数,而三角函数需要用到弧度制,所以用到toRadiars的转换方法将角度转换为弧度,用三角函数确定坐标位置。方法如下
在这里插入图片描述

下面绘制时针分针秒针,与画时间刻度是一样的,但是时针分针秒针是对时间变化而运动的,所以就需要当前的时间,如时针,时针每小时走30度,每分钟走0.5度,分针每分钟走度,秒针每秒钟走6度,所以计算弧度的时候可以直接进行计算。因为角度顺时针,所以在0时0分0秒的度数是270度,进行初始。
在这里插入图片描述

然后在下面进行时间的输出
在这里插入图片描述

最后来获取当前的时间我用到了线程,创建一个线程,调用calendar方法获取时分秒,并每次等待1000毫秒,1秒之后进行重绘。
在这里插入图片描述

最后用函数进行程序的运行。
在这里插入图片描述

界面设计

在这里插入图片描述

界面如上图

实验结果

以下为实验结果
在这里插入图片描述

讨论与分析

通过本次实验,对Java有了更深的理解,对窗口有了简单的了解,熟悉了JFrame的使用,掌握了一些最简单的画图方法,感觉还是很有意思的。但是在这过程还是很困难的,我不得不在网上查询一些资料,第一了解了计算机与数学中的小差异,坐标原点在左上角,y轴方向向下,角度方向是顺时针,在进行实验的时候,这是我遇到的困难之一,绘制时间刻度的时候,是从0度开始,就出现了一些差错,所以300度正好是1点钟方向。第二是忘记了用super清空窗口中已有图像,造成的结果像下面一样。第三重要的,就是对当前时间的调用,对线程有了初步的了解。
在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值