JAVA时钟程序.docx

上传人:b****5 文档编号:3346610 上传时间:2022-11-22 格式:DOCX 页数:18 大小:109.46KB
下载 相关 举报
JAVA时钟程序.docx_第1页
第1页 / 共18页
JAVA时钟程序.docx_第2页
第2页 / 共18页
JAVA时钟程序.docx_第3页
第3页 / 共18页
JAVA时钟程序.docx_第4页
第4页 / 共18页
JAVA时钟程序.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

JAVA时钟程序.docx

《JAVA时钟程序.docx》由会员分享,可在线阅读,更多相关《JAVA时钟程序.docx(18页珍藏版)》请在冰豆网上搜索。

JAVA时钟程序.docx

JAVA时钟程序

编号:

Z04500052

学号:

2

课程设计

教学院

计算机学院

课程名称

JAVA课程设计

题目

时钟程序

专业

13应用技术

班级

应用技术

(1)班

姓名

张琳

同组人员

刘敏陈碧菲周丹丹田琼玲

指导教师

伍红华

 

 

2014年6月15日

 

七.附录....................................................................................................8

八.参考文献............................................................................................9

 

一.问题分析和任务定义

1.问题分析

此次课程设计的题目为简单的小时钟程序设计,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK等开发工具的运用,拓宽常用类库的应用。

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

时钟可以分为:

电子时钟,数字时钟。

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

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

2.任务定义

基本功能:

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

基本实现:

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

3.任务分工

(1)图形界面设置关闭窗口(田琼玲)

(2)显示时钟桌面(陈碧菲)

(3)实现接口runnable的方法run,用来刷新时分秒三指针的度数(刘敏)

(4)方法重写绘制钟面各元素(张琳)

(5)将电脑时间日期进行同步,并显示出来,用switch语句实现多分支选择结构(周丹丹)

二.逻辑设计

1.包

java.awt包,包含构成抽象窗口的工具集(abstrsctwindowtoolkit)的多个类,用来构建和管理应用程序的图形用户界面(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)DataDateFormat,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接口。

最后编写主函数:

其中有三个成员变量,以图的形式来展示

Clock类成员变量

成员变量分类描述

变量类型

名称

时针

String

Hour

分针

String

Minute

秒针

String

Second

2.程序主流程图

 

 

三.详细设计

程序主功能图

本次实训上机操作中,我负责的为方法的“重写绘制钟面各元素,方法的重写极为子类可继承父类中的方法,而不需要重新编写相同的方法。

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

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

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

 

 

四.程序编码

个人任务“方法重写绘制钟面各元素”代码

publicvoidpaint(Graphicsg){

//清屏

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);

intx1=(int)((r-10)*Math.sin(rad*s));

inty1=(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);

intd=29;

for(inti=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(inti=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.显示数字时钟效果

部分代码:

//获得时间、星期、日期

Calendarnow1=newGregorianCalendar();//获得当前的日期时间对象

inthour=now1.get(Calendar.HOUR_OF_DAY);//小时,获得当前的时刻

intminute=now1.get(Calendar.MINUTE);//分,同上

intsecond=now1.get(Calendar.SECOND);//秒

intyear=now1.get(Calendar.YEAR);//年

intmonth=now1.get(Calendar.MONTH)+1;//月

intdate=now1.get(Calendar.DAY_OF_MONTH);//日

intweek=now1.get(Calendar.DAY_OF_WEEK);//星期

System.out.println(week);

//星期转换字符串

StringweekDay="";

switch(--week){

case1:

weekDay="一";break;

case2:

weekDay="二";break;

case3:

weekDay="三";break;

case4:

weekDay="四";break;

case5:

weekDay="五";break;

case6:

weekDay="六";break;

case0:

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的星期转换字符串,

当电脑上的时间发生改变的时候,钟上的指针也会跟着发生改变。

 

2.设计总结

通过本次JAVA的实训,我觉得学习基础很重要,本次试验的代码,经过了很多次的验证和修改,本来的只显示表盘和指针的基础上同步了电脑上的时间日期和星期,通过线程实现了运行,时钟程序虽然简单,但为了弄懂了解清楚,我们组也是花费了一定时间。

这个时钟的设计上时钟表面有12个刻度,指针也是不同颜色的,最上面的则为同步的电脑时间与日期和星期,该时间与指针显示的时间也为一致的,但并没有实现对于时间的重置。

我想不断地进行对该设计的完善,不仅能为该始终设置背景,以增加该时钟的美观效果,也可以对始终到了一定的时间就可以报时,即闹钟功能的设置,为闹钟设置多种不同的音乐,也可供选择,这样的话就不显得单调,这样一来该时钟便可更方便实用

这次试验也更让我了解到同组之间配合的重要,通过相互之间的沟通说出自己的想法也能增加别人的理解,从而学到更多的东西。

本想在时钟程序中添加闹钟功能和时间修改的功能,但由于能力有限始闹钟功能只能将它单独运行出来,而不能组合在一起。

本次实验中也遇到了许多的问题,有一些也都是以前没学习过的,也有自己粗心的问题,而制造出来的一些麻烦,但经过看书,查找资料,同学之间的相互交流针对性的对不懂的问题进行查询,才让他们逐步得到解决,在将思路进行整理。

这次的实训也让我理解到JAVA一些概念的重要性,我们自己本身也应该建立一个编程的思想,属性JAVA开发的环境,学习也不能局限在上课认真听讲,还需自主学习,课外时间多了解一些相关方面的知识,这样才能加快自己对专业知识的理解,另外,对于不懂的问题可以通过查阅资料或者咨询同学老师,让它得到解决,不能轻易地像代码认输,这样的话,面对困难你就畏缩,以后一定会一事无成的,在以后的时间里,我会努力学习,认真听课,深化知识,不断创新,继续强化自己的能力,这样才不能枉费我们在大学里所付出的时间和汗水,以及老师对于我们的教导与帮助,相信在以后的日子里,通过我们自己的努力,我们一定可以成为一个有用的人。

附录

importjava.awt.Color;

importjava.awt.Graphics;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

importjava.util.Calendar;

importjava.util.GregorianCalendar;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

/**

*时间类*

*/

publicclassClockTestextendsJFrame{

privatestaticfinallongserialVersionUID=1L;

//无参数构造器

publicClockTest(){

ClockPaintcp=newClockPaint(150,150,90);

this.add(cp);

this.setSize(500,500);

this.setResizable(false);

this.setLocation(200,300);

this.setTitle("小时钟");

this.setVisible(true);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

publicstaticvoidmain(String[]s){

newClockTest();

}

}

//表盘类,继承于JPanel,并实现Runnable接口,用于多线程

classClockPaintextendsJPanelimplementsRunnable{

privatestaticfinallongserialVersionUID=1L;

privatestaticfinalGraphicsg2d=null;

intx,y,r;

inth,m,s;//小时,分钟,秒

doublerad=Math.PI/180;

//构造器,初始化

publicClockPaint(intx,inty,intr){

this.x=x;//坐标x

this.y=y;//坐标y

this.r=r;//表盘的半径

Calendarnow=newGregorianCalendar();

s=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;//获得小时

Threadt=newThread(this);//创建一个线程

t.start();//表开始走动

}

//画表盘

publicvoidpaint(Graphicsg){

//清屏

super.paint(g);

g.setColor(Color.BLACK);//用黑色

g.fillRect(0,0,r*8,r*8);//填充一个黑色的矩形做为背景

//画圆

g.setColor(Color.BLACK);//用黑色

g.drawOval(x,y,r*7,r*7);//画出表盘的轮廓

//用红色画秒针

g.setColor(Color.RED);

intx1=(int)((r-10)*Math.sin(rad*s));

inty1=(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);

intd=29;

for(inti=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(inti=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;

}

//获得时间、星期、日期

Calendarnow1=newGregorianCalendar();//获得当前的日期时间对象

inthour=now1.get(Calendar.HOUR_OF_DAY);//小时,获得当前的时刻

intminute=now1.get(Calendar.MINUTE);//分,同上

intsecond=now1.get(Calendar.SECOND);//秒

intyear=now1.get(Calendar.YEAR);//年

intmonth=now1.get(Calendar.MONTH)+1;//月

intdate=now1.get(Calendar.DAY_OF_MONTH);//日

intweek=now1.get(Calendar.DAY_OF_WEEK);//星期

System.out.println(week);

//星期转换字符串

StringweekDay="";

switch(--week){

case

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

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1