时钟

     1.编写一个时钟的程序,要求显示一个圆形的时钟,以及一个文本字符形式显示的时钟。

    本题采用观察者模式的设计模式,即某一主题更新了,其他观察者都能收到更新的通知。

   时钟这个实验中,DataModel是一个接口,ClockModel是实现这个接口的类。分别相当于观察模式中的主题(subject)接口和具体实现的接口的主题(ConcreteSubject)。而ClockCircleClockTextClock的接口,相当于观察者模式中的观察者接口Observer)具体的观察者(ConcreteObserver)的对应关系

    上面就是MVC的数据Model部分。对于视图View部分,采用的是BorderLayout布局方式,将TextClock放在BorderLayout.NORTH的方位上,CircleClock放在在BorderLayout.CENTER的方位上。当TextClock对象和CircleClock对象收到ClockModel对象的时间更新通知时,也相应更新自己的时间。其中这部分比较难的就是CircleClock对象圆时钟的绘制。主要思想是:你可以假设已知方位角为A=0.0000,以半径R=距离,(X,Y)是圆心,按照任意角度a来计算坐标。

X=X+sin(A+a)*R

Y=Y+cos(A+a)*R

   提示:这儿在代码中”+”不一定是“+”,也可以是“-”,即当圆旋转到一定的角度就是“-”了。

   按以上方式可以绘出圆,不过会发现得到的时钟锯齿状比较明显,需要消除锯齿状:       setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON)。

 对于MVC中控制Control部分,就是为时钟添加线程,timer.schedule(newonetask(), 1000); 每一秒钟就更新一次时间,也就是重新绘制CirclePane和TextPane。

   


  这个实验主要巩固了观察者模式。

  结果截图:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值