好文档 - 专业文书写作范文服务资料分享网站

java课程设计-Windows系统时间属性模拟

天下 分享 时间: 加入收藏 我要投稿 点赞

1、 左边部分主要实现的是日历的动态显示和设置,可以选择月份的下拉选择框是java 提供的Choice纽件,右边点击旁边的小型按钮能使当前的年份加一或者减以一,这是由java 中的JSpinner组件。其中边框上面显示的文字,是调用而板Panel的方法设置成功的。至于 动态设置无论是选择了月份的下拉选择框还是JSpinner纽件的值改变都引起了当前日历信 息中显示的改变。这点不难想到是选择这两个组件的某一项触发了事件引起了左边中间的日 期显示的重新设置。实际上刚好是Choice的Item Listener事件和JSpinner的构造函数的参数 ChangeListene的事件,具体实现将在后面加以讨论。; 2、 右边部分为一个模拟的时钟程序,每隔-?秒分针该变-■次位置,分针每隔一分钟改 变一次位置,和生活中常见的时钟-样,实现方式采用线程,现成的run()方法每隔-秒恢 复执行一次,执行完毕后又睡眠一分钟,然后又继续运行,周而复始。时钟部分是调用了一 个paintOPA数每次执行时重画时钟,并用当询背最色填允原來秒针的位置就行了。具体实现 后而再详细讨论。 算法设计思想说明 1、本次课程设计的需要核心函数共有两个,一个用于实现设置H期和年份显示的函数 update(int year,int month)o这个函数的传入参数month为Choice选择框中选中的刀份对应的 整数值,year为JSpinner中选中的年份对应的整数值,函数的功能是在毎次这两个组件的事 件触发处理西数中调用重新设置显示日期的方式。 函数伪码表示如下: update(iiit yeanint month) int n=O,s,i>j,k,r;

Calendar cak?ndar_CaIcndar.gctlnstanccO;^ calcndar.sctTimc(new Datc());

日历类的方法和操作如何

// 设置时间 无名对彖,得到

了当前的时间date的类的结构。

j=calendar. get( Calend ar. Y E AR);// k=calcndar.gct(Calcndar.MONTH)+1; r=alendar.get(Calendar.DAY OF MONTH); calendar.set(y, m-1, 1);//

s=c a lendar. get( Calendar. D A Y_OF_ W EEK); switch(m)

//

获得当前的年份 〃获得当询的月份

//为前的天数

没置日历对象?为参数的部分

星期儿这天是

创建一个日历对象,设置对象的时间为当前系统对象。calendar.get(Calend

中间显示口期的中放胃了 49个标签(布局管理器的原因)。得到了一个月的开始第一天 是星期儿后,如为星期三,丨号必须与星期三对齐,则1号前面的标签隐藏,然后一次排列, 每7个一行,直到这个月的最后一天为止,这后而的标签仍然隐藏。也就是说我们看到一个 月的1号前血是空的,其实是隐藏了。原理比较简单,以后只需毎次响应事件处理每次调用 这个函数即可。具体代码见后面。 2、另外一个函数就是体现时钟动态\走”的public void paint(Graphics g)。这个函数 的功能就是每次线程斛來时调用-?次,重画原來的时钟显示正确当前系统时间。由于毎隔一 秒重画一次,用户就好像看到时许“走”起来了。 绘图时需要绘制一个圆,三个指针,并且需要在画新的时间前清除原來的时间,和计算 当前时间下每次秒针,分针,时针的位置,这就要用到儿何的知识了,这里仅给出计算的公 式,不说明这样计算的原因。 xs=(int)(Ma(h.cos(s*3.141730-3.14f72)*45+xccntcr);// 计算 ys=(int)(Math.sin(s*3.14f730-3.14/2)*45+ycenter); xm-(int)(Math.cos(m*3.14f73O-3.14172) *40+xc enter); ym-(int)(Math.sin(in*3.14t73O-3.14(72)*40+yc enter); xh=(int)(Math.cos((h*30+nV2)*3.!4f/180-3.14f72)*30+xcenter); yh=(uit)(Math.sin((h#30+w'2)*3.14f7180-3.14f72)*30+yenter); 说明:xcenter为圆的圆心x唯标,ycenter为圆的圆心y朋标,s为当前系统时间的秒值, m为当前系统时间的分钟数,h为小时 上而一次求出了秒针的xs横坐标,纵坐标,接下來是分针,时针。 需耍清除掉毎次时间改变后图形改变的部分,用当询的背景色为字体的颜色画一次,原 来的颜色就看不见了,这里用的就是这种方法。代码如下: iRxs! =lastxs ||ys! =lastys) g.drawLine(xcenter,ycenter,lastxs,lastys);

if(xm!=hstxm||ym!=lastym) g.drawLine(xcenter,ycenterJastxm,lastym);

g. draw Line( xc enter-1 ,ycenter,lastxm,lastym); }

if(xh!=lastxh||yh!=lastyh) {

g.drawLine(xccntcr,yccntcr-l,lastxh,lastyh); g.dravvLiiie(xcenter-l,ycenter,lastxh,kistyh);

6

}

详细代码见附录中程序相应部分

详细设计

设计步骤及流程

基于笫二部分的描述,对程序设计的思路有了全局的把握,开始具体实践包括界而布局, 界面设计,代码实现。这里需要实现相应的接I I Ac tion Listener, Window Listener, Runnab le等。 注册添加组件的MT?监听器,完成余下的操作。下面就笫.1部分提到的主调函数的实现以流 程图的方式表示如下。

开始 建上一个H历类対象,Calendar Calendar-Calendar.gelInslanc巳();接着调用方法 calendar.set(yt m-1, \\\\J!

s=calcndar.get(Calcndar.DAY_OF_WEEK);得到了这个月的第一天是星期儿(备用) 编写代码,判定month对应的月份的天数n:l, 3, 5, 7, 8, 10, 12,则31天:4, 6, 7. II则为30. 2月平年为28天,闰年为29天。n的值备用.

1号与应正确的星期数对齐,从I…n依次设置标签的值为I…n,这样就和平常见到的日历是个效果 了,当然1号前面

的部分应该是设置为空白,最后一夭n后面的标签的值也设置为空白,周六,周末 那两列的字体颜色设置为红色。当天的号数用绿色前景显示。

IS 1-1 update(int yearjnt month)的流程图

开始

Date rigfitnownevv Date()得到泊询系统时间,通过调用rightnow的toStringO方法转 化成字符串,

然后分别提取相应位的子串转化为整数得到当询时间的小时.分钟,

确定画图的闘心位置.分别算出时针.分针,秒针的线段端点值,与上次保存的端 点值比较

7

-一—

L—1

果相尊?一》^一?二n -------------------- ' . ....

用背景色画上次的直线,这样就淸楚了上次的结果

以当前的端点值为坐标,以黑色字体画新的线段,新的时钟小时,分钟.秒数就显 示出來了,保存此次的端点供F—秒调用时比较使用

图 1-2 paint(Graphics g)的流程图

运行效果图

8

日期(D)

|十二月二| | 2,0閔日

时间C T)

当苗时区:中国标准时间

19:51:47

18122 0 418 7122 31017731 三307 296 5112 — 85 4112 29162330 529 应用(A)

图1?03运行截图

图1-04运行截图

说明:这两幅图是不同时间的截图,而且左边的设置已经不一样了。

心得与体会

在真正学习java课程前我已接触了一些Java方面的书籍,自己也学习了简单的Java编

9

java课程设计-Windows系统时间属性模拟

1、左边部分主要实现的是日历的动态显示和设置,可以选择月份的下拉选择框是java提供的Choice纽件,右边点击旁边的小型按钮能使当前的年份加一或者减以一,这是由java中的JSpinner组件。其中边框上面显示的文字,是调用而板Panel的方法设置成功的。至于动态设置无论是选择了月份的下拉选择框还是JSpinner纽件的值改变都引起了当前日历信息中显示的改变。这点
推荐度:
点击下载文档文档为doc格式
5qal7936yh6trx01723y3gzju6vsnw00djc
领取福利

微信扫码领取福利

微信扫码分享