当前位置:文档之家› JAVA时钟程序

JAVA时钟程序

课 程 设 计2014 年 6 月 15 日教 学 院 计算机学院 课程名称 JA V A 课程设计题 目 时钟程序专 业 13应用技术 班 级 应用技术(1)班姓 名 张琳同组人员 刘敏 陈碧菲 周丹丹 田琼玲指导教师伍红华目录一.问题分析和任务定义 ..................................... 错误!未定义书签。

二.逻辑设计.......................................................... 错误!未定义书签。

三.详细设计.......................................................... 错误!未定义书签。

四.程序编码.......................................................... 错误!未定义书签。

五.程序调试与测试 ............................................. 错误!未定义书签。

六.结果分析.......................................................... 错误!未定义书签。

七. 附录 (8)八. 参考文献 (9)一.问题分析和任务定义1.问题分析此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK等开发工具的运用,拓宽常用类库的应用。

运用了鼠标的监听和事件的监听以及侦听的技术来时钟的功能。

时钟可以分为:电子时钟,数字时钟。

其中数字时钟包括表盘,数字,指针。

用JPanel类来指定布局管理器,同时新增一个功能也是设计需求的功能,可以随时的调时间,运用到鼠标和按钮的监听效果来完成调时间的功能。

2.任务定义基本功能:打开java工作界面,有很明显的数字时钟在界面上,并且指针在走动,数字钟的显示以本地系统时间而定,一秒钟跳动一次,若本地系统时间发生改变,则数字钟的时、分、秒也随着改变,左上角并拥有与电脑同步的时间日期与星期用数字直接显示出来。

基本实现:定义窗口类继承import javax.swing.JFrame;类并实现ActionListener接口,在窗口类中定义成员变量,用于表示窗口中菜单、文本框,定义成员方法actionPerformed,用于事件处理。

3.任务分工(1)图形界面设置关闭窗口(田琼玲)(2)显示时钟桌面(陈碧菲)(3)实现接口 runnable的方法run,用来刷新时分秒三指针的度数(刘敏)(4)方法重写绘制钟面各元素(张琳)(5)将电脑时间日期进行同步,并显示出来,用switch语句实现多分支选择结构(周丹丹)二.逻辑设计1.包java.awt包,包含构成抽象窗口的工具集(abstrsct window toolkit)的多个类,用来构建和管理应用程序的图形用户界面(GUI)。

java.Swing包,扩充和增强图形用户界面功能。

java.awt.event包,提供接口和类来处理不同类型的事件触发的AET组件。

java.text包,提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。

java.util包,包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。

java.awt.event包,提供处理由 AWT 组件所激发的各类事件的接口和类。

javax.swing.event包,供 Swing 组件触发的事件使用。

2.类的设计(1)Color类:Color类用来定义颜色,包括图形背景的颜色,表盘的颜色,指针的颜色,数字的颜色。

(2)Data DateFormat,SimpleDateFormat :该类是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。

单位是毫秒。

其中SimpleDateFormat类是对日期/时间格式化子类允许进行格式化(3)Calender类:Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得日期)提供了一些方法,瞬间可用毫秒值来表示。

(4)Date类:Date类用来表示特定的瞬间,时间精确到毫秒。

(5)JFrame类:该类用来控制窗格和根窗格(6)JPanel类:JPanel 是一般轻量级容器。

可以用来指定布局管路器。

(7)JButton类:该类定义按钮,并且实现按钮(8)ActionEvent接口:指示发生了组件定义的动作的语义事件。

当特定的组件动作(比如被按下)发生时,由组件(比如 Button)生成此高级事件。

事件被传递给每一个ActionListener 对象,所以要实现ActionListener的接口。

(9)Timer类:在指定时间间隔触发一个或多个 ActionEvent。

它将 Timer 用作绘制其帧的触发器。

(10)JSpinner:该类用来让用户从一个有序序列中选择一个数字或者一个对象值的单行输入字段。

Spinner 通常提供一对带小箭头的按钮以便逐步遍历序列元素允许用户在spinner 中直接输入合法值。

3.主要内容创建一个钟表。

借助swing类和接口内部类的实现,在本程序中以实现Runnable接口内部类的形式创建多线程对象。

Runnable接口只定义了一个run()方法,所以调用start和sleep()方法时,必须创建Thread实例化对象。

Interrupt()方法的作用是中断线程。

其作用方式是:多线程对象.interrupt()。

4.整体流程类的总体名字为clock,实现ActionListener接口,鼠标的监听器实现此程序。

先运用构造函数画一个长和宽都为300的圆,并且设置颜色为黑色,固定其窗口调整为拉动不可变定义setVisible(true),就是调整窗口可保持不变。

画圆画完圆之后在圆上设置12个数字,运用math函数方法来绘制时间,并且把每个时间的位置用函数关系调整好。

在圆上设置时针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为青色。

定义时针的变量类型为string类型的成员变量,设置名称为Hour。

在圆上设置分针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为蓝色。

定义时针的变量类型为string类型的成员变量,设置名称为Minute。

在圆上设置秒针,要用到math类,来绘制时针并且用函数来控制时针的走动和相对应的位置。

color类来控制颜色,这里定为红色。

定义时针的变量类型为string类型的成员变量,设置名称为Second。

在这些设置完后,需要对其进行监控就要用到ActionPerformed方法,对事件的监控和ActionEvent接口并且递给每一个 ActionListener 对象,所以还要创建一个类实现ActionListener接口。

最后编写主函数:其中有三个成员变量,以图的形式来展示2.程序主流程图三.详细设计程序主功能图本次实训上机操作中,我负责的为方法的“重写绘制钟面各元素,方法的重写极为子类可继承父类中的方法,而不需要重新编写相同的方法。

Public void paint(Graphics g)paint()就是一个画笔方法,用来在屏幕上绘制你所需要绘制的东西。

要是想屏幕上绘制东西就得先用Grapahics把东西绘制到内存里去再由repaint();方法显示到屏幕上去。

设置左上角的坐标为(0,0),并以半径为8用黑色进行背景填充颜色,后又画圆的轮廓即为表盘的轮廓,再用三种颜色分别构造不同长短大小的指针,最后利用两个for循环分别在表盘内运用g.drawString根据调用的函数算法在表盘内相应的坐标位置进行画点与数字的显示。

四.程序编码个人任务“方法重写绘制钟面各元素”代码public void paint(Graphics g) {// 清屏super.paint(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);//画出表盘的轮廓// 用红色画秒针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, 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) * 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) * Math.cos(rad * h));g.drawLine(x + r, y + r, x + r + x1, y + r - y1);// 用黄色画表盘上的数字g.setColor(Color.YELLOW);int d = 29;for (int i = 1; i <= 12; i++) {x1 = (int) ((r - 10) * Math.sin(rad * d));y1 = (int) ((r - 10) * Math.cos(rad * d));g.drawString(i + "", x + r + x1 - 4, x + r - y1 + 5);d += 30;}// 画小点,表示刻度d = 0;for (int i = 0; i < 60; i++) {x1 = (int) ((r - 2) * Math.sin(rad * d));y1 = (int) ((r - 2) * Math.cos(rad * d));g.drawString(".", x + r + x1 - 1, x + r - y1 + 1);d += 6; }五.程序调试与测试1.显示指针时钟效果2.显示数字时钟效果部分代码:// 获得时间、星期、日期Calendar now1 = new GregorianCalendar();//获得当前的日期时间对象int hour = now1.get(Calendar.HOUR_OF_DAY);//小时,获得当前的时刻int minute = now1.get(Calendar.MINUTE);//分,同上int second = now1.get(Calendar.SECOND);//秒int year = now1.get(Calendar.YEAR);//年int month = now1.get(Calendar.MONTH)+1;//月int date = now1.get(Calendar.DAY_OF_MONTH);//日int week = now1.get(Calendar.DAY_OF_WEEK);//星期 System.out.println(week);//星期转换字符串String weekDay = "";switch(--week){case 1:weekDay="一";break;case 2:weekDay="二";break;case 3:weekDay="三";break;case 4:weekDay="四";break;case 5:weekDay="五";break;case 6:weekDay="六";break;case 0:weekDay="日";break;default :weekDay="";break;}//显示时间、星期、日期g2d.setColor(Color.PINK);g2d.drawString((hour<10?"0":"")+hour+ ":"+ (minute<10?"0":"")+minute+ ":"+ (second<10?"0":"")+second+" "+"("+weekDay+")"+" "+year+ "/"+ (month<10?"0":"")+month+ "/"+ (date<10?"0":"")+date,5, 15);}六.结果分析1.运行Clock.java图2查看实时时间运行结果分析:本程序运行结果界面显示为黑色,并加入了12个刻度,指针颜色设置上也都是不一样的,左上角的时间日期显示与电脑上的进行了同步,并且运用了switch的星期转换字符串,当电脑上的时间发生改变的时候,钟上的指针也会跟着发生改变。

相关主题