日期:2014-05-20  浏览次数:20771 次

设计可组装的j2me UI(四) 时间控件
?? ??? 开放过项目的人都知道。用户的需求是时刻变化的。我们要做到的只是不断的去适应这种变化。因为给钱的是人家。
?????? 今天这篇文章让我们来学习怎么样设计一个可以在j2me低级UI上显示的时钟。经过前面几篇文章相信大家都知道我的UI设计思路了。我们现在要做的就是设计一个Part(这个是什么来的,呵呵。如果没看过我前面文章的朋友们,建议你们先读下,我想会有好处的。^_^)。
????? 我的控件思路是这样的。首先在整个屏幕中拿出一小块出来。然后在这一小块里面绘制显示时间(时间可以是纯文字,也可以是图片等),然后我们实现Runnable接口,让它没秒钟都刷新一下那一小块屏幕。是不是很简单呢。呵呵。下面让我们来看下具体代码吧
java 代码
?
  1. /********************************************************************?
  2. ?*?
  3. ?*?版权说明,此程序仅供学习参考。不能用于商业?
  4. ?*?
  5. ?********************************************************************/??
  6. package?org.pook.ui;??
  7. ??
  8. import?java.util.TimerTask;??
  9. ??
  10. import?javax.microedition.lcdui.Display;??
  11. import?javax.microedition.lcdui.Displayable;??
  12. import?javax.microedition.lcdui.Graphics;??
  13. ??
  14. import?org.pook.file.BookFileManager;??
  15. import?org.pook.log.Log;??
  16. import?org.pook.ui.core.Platform;??
  17. import?org.pook.ui.form.Panel;??
  18. import?org.pook.ui.timer.TimerTaskManager;??
  19. import?org.pook.ui.util.GraphicsUtil;??
  20. import?org.pook.util.DateTime;??
  21. ??
  22. /**?
  23. ?*?类名:TimerPart.java?
  24. ?
  25. ?*?编写日期:?2006-9-29?
  26. ?
  27. ?*?程序功能描述???
  28. ?
  29. ?*?Demo:?
  30. ?
  31. ?*?Bug:?
  32. ?
  33. ?*?
  34. ?*?程序变更日期?
  35. ?
  36. ?*?变更作????
  37. ?
  38. ?*?变更说明?
  39. ?
  40. ?*?
  41. ?*?@author?wuhua?
  42. rrq12345@163.com?
  43. ?*/??
  44. public?class?TimerPart?extends?Part?implements?Runnable{??
  45. ??
  46. ????Log?log?=?Log.getLog("TimerPart");??
  47. ?????
  48. ????/**?时间显示字段?????*/??
  49. ????private?static?int?hour?;??
  50. ????private?static?int?minute;??
  51. ????private?static?int?second;??
  52. ?????
  53. ????private?static?String?time;??
  54. ?????
  55. ????/**?用于执行消失窗口?*/??
  56. ????protected?TimerTask?task;??
  57. ?????
  58. ????/**?获取系统时间?**/??
  59. ????private?DateTime?dt;??
  60. ?????
  61. ?????
  62. ?????
  63. ????private?Display?display;??
  64. ????private?Displayable?displayable;??
  65. ??
  66. ????private?String?h;??
  67. ??
  68. ????private?String?m;??
  69. ??
  70. ????private?String?s;??
  71. ?????
  72. ????public?TimerPart(Display?display)?{??
  73. ????????super(Platform.WIDTH?-?45,?0,?45,?20);??
  74. ????????dt?=?new?DateTime();??
  75. ????????hour?=?dt.hour?;??
  76. ????????minute?=?dt.minute?;??
  77. ????????second?=?dt.second?;??
  78. ???
  79. ?????????time?=?hour?+?":"?+?minute?+?":"?+?second;??
  80. ???????????
  81. ???????
  82. ????????task?=?TimerTaskManager.getInstace().add(this,?1000);??
  83. ????????this.display?=?display;??
  84. ????}??
  85. ??
  86. ????public?void?paint(Graphics?g)?{??
  87. ????????g.setColor(0x00000);??
  88. ????????g.drawString(time.toString(),?view[X],?view[Y],?Graphics.TOP?|??
  89. ????????????????Graphics.LEFT);??
  90. ????//????GraphicsUtil.darwString(g,new?Boolean(BookFileManager.available()).toString(),?view[X],?view[Y]);??
  91. ??
  92. ????}??
  93. ??
  94. ????public?void?onClick(int?keyCode)?{??
  95. ???????
  96. ????}??
  97. ??
  98. ????/**?
  99. ?????*?刷新时间的方法,每隔1秒钟刷新?????
  100. ?????*/??
  101. ????public?void?run()?{??
  102. ???????????
  103. ?????????
  104. ????????//更新时间??
  105. ?????????updateTime();??
  106. ?????????repaintTime();??
  107. ?????????
  108. ????}??
  109. ?????
  110. ????/**?
  111. ?????*?这里本不应该与程序又任何关联的???但考虑到???????
  112. ?????*???以就先这样先?
  113. ?????*?
  114. ?????*/??
  115. ????private?void?repaintTime()?{??
  116. ????????if(display?==?null)??
  117. ????????????return;??
  118. ????????displayable?=?display.getCurrent();??
  119. ????????if(displayable?instanceof?Panel){??
  120. ????????????Panel?panel?=?(Panel)displayable;??
  121. ????????????panel.repaintTimer();??
  122. ????????}??
  123. ????}??
  124. ??
  125. ????/**?
  126. ?????*?更新时间,频率是1???
  127. ?????*?
  128. ?????*/??
  129. ????private?void?updateTime()?{??
  130. ????????second?++?;??
  131. ????????if(second?==?60){??
  132. ????????????second?=?0;??
  133. ????????????minute?++?;??
  134. ????????}??
  135. ?????????
  136. ????????if(minute?==?60){??
  137. ????????????minute?=?0;??
  138. ????????????hour?++?;??
  139. ????????}??
  140. ?????????
  141. ????????if(hour?==?24?&&?minute?==?0){??
  142. ????????????hour?=?00;??
  143. ????????}??
  144. ?????????
  145. ????????h?=???hour<10?("0"+hour):hour?+?""?;??
  146. ????????m?=????minute<10?("0"+minute):minute?+?"";??
  147. ????????s?=???second<10?("0"+second):second?+?"";??
  148. ?????????
  149. ????????time?=?h?+?":"?+?m?+?":"?+?s;??
  150. ????}??
  151. ??
  152. ??
  153. ??
  154. ??
  155. }??


具体的详细例子在: 手机电子书阅读软件基本框架? wuhua.iteye.com/admin/show/28821
看看这图片:
1 楼 wuhua 2006-11-16  
这个例子要考虑到手机的性能跟kvm的底层实现哦
因为你是采用1秒钟跳一次,但是这个跳,并非是跟实际时间来跳的。因为程序本身都损耗了一些时间,所以。。。
经过测试大概时钟走一天会慢一小时。呵呵。大家有什么好的解决办法。可以放开讨论