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

设计可组装的j2me UI(五) List
??????? 高级UI中的List控件对于广大应用来说是足够的。但有些特别需求的功能确不得不自己开发,比如实现没一行字体颜色不同,字体样式不同,还有排版等方面问题时候则要自己动手实现一个了。下面把我在项目中学习到得经验与大家分享下。
?????? 但是客户有个需求,说你这个List需要翻页,我要求输入什么键你进行上下翻页。我要求在每一行字体里面包含一些不同颜色得字,根据XP,好我拥抱需求。所以让我们来看下怎么修改程序得。
????? 注意在看这篇文章之钱,请稍微留意下在下得前面几篇文章。谢谢,^_^
????? 代码如下,我会加比较多得注释

java 代码
?
  1. /********************************************************************?
  2. ?*??
  3. ?*?版权说明,此程序仅供学习参考。不能用于商业?
  4. ?*??
  5. ?********************************************************************/??
  6. package?org.pook.ui;??
  7. ??
  8. import?java.util.Vector;??
  9. ??
  10. import?javax.microedition.lcdui.Graphics;??
  11. import?javax.microedition.lcdui.Image;??
  12. ??
  13. import?org.pook.ui.core.Platform;??
  14. import?org.pook.ui.util.GraphicsUtil;??
  15. ???
  16. ??
  17. /**?
  18. ?*?类名:List.java?
    ?
    ?
  19. ?*?编写日期:?2006-10-14?
    ?
  20. ?*?程序功能描述:实现Part部件,而获取可按照自己要求得效果得List
    ?
  21. ?*?Demo:?
    ?
  22. ?*?Bug:?
    ?
  23. ?*??
  24. ?*?程序变更日期?:
    ?
    ?
  25. ?*?变更作者?:
    ?
    ?
  26. ?*?变更说明?:
    ?
  27. ?*??
  28. ?*?@author?wuhua?
    ?
    ?
  29. ?*/??
  30. public?class?List?extends?Part?{??
  31. ????Image?icon;??
  32. ????Vector?items;????????
  33. ????int?numOfEls;???
  34. ????int?paintSize;??
  35. ????int?space;??
  36. ????/**?开始索引?*?*/??
  37. ????private?int?startIndex;??
  38. ????

  39. ????public?List(Image?icon)?{??
  40. ????????super(0,?21,?Platform.WIDTH,?Platform.HEIGHT?-?41);??
  41. ????????this.icon?=?icon;??
  42. ????????items?=?new?Vector();??
  43. ???????????
  44. ????}??
  45. ???
  46. ?? /** 主要是根据屏幕变化而改变各个StringItem的位置跟当前屏幕可以显示StringItem的大小*?*/?
  47. ?
  48. ????public?void?changeViewAndSize(){??
  49. ????????if?(Platform.HEIGHT?-?20?>?view[HEIGHT])?{??
  50. ????????????view[HEIGHT]?=?Platform.HEIGHT?-?41;??
  51. ????????????space?=?font.getHeight()?+?2;??
  52. ????????????paintSize??=?view[HEIGHT]?/?space;??
  53. ????????}??
  54. ????}??
  55. ???
  56. ????public?void?append(Vector?items){??
  57. ????????if(items?==?null)??
  58. ????????????return;??
  59. ????????this.items?=?items;??
  60. ????????this.numOfEls?=?items.size();??
  61. ????}??
  62. ??
  63. ????public?void?append(String?stringItem){??
  64. ????????this.items.addElement(stringItem);??
  65. ????????this.numOfEls?=?items.size();??
  66. ????}??
  67. ??????
  68. ??????
  69. ????public?void?insert(String?stringItem){??
  70. ????????this.items.insertElementAt(stringItem,0);??
  71. ????????this.numOfEls?=?items.size();??
  72. ????}??
  73. ??????
  74. ????public?int?getSelectIndex(){??
  75. ????????return?this.selectIndex;??
  76. ????}??
  77. ??????
  78. ????public?String?getSelectString(){??
  79. ????????//System.out.println(this.numOfEls);??
  80. ????????return?(String)?this.items.elementAt(selectIndex+startIndex?);??
  81. ????}??
  82. ??????
  83. ????public?void?paint(Graphics?g)?{??
  84. ????????changeViewAndSize();??
  85. ????????GraphicsUtil.fillScreen(g,?this.bgColor,?view[X],?view[Y],?view[WIDTH],?view[HEIGHT]);??
  86. ????????paintStrings(g);??
  87. ????}??
  88. ??
  89. ????private?void?paintStrings(Graphics?g)?{??
  90. ??????
  91. ????????if?(items.size()?==?0)??
  92. ????????????return;??
  93. ????????int?size?=?this.paintSize?>?this.numOfEls??this.numOfEls:this.paintSize?+?startIndex;??
  94. ??????????
  95. ????????paintSelect(g,?view[Y]?+?space?*?selectIndex?+?2?);??
  96. ??????????
  97. ????????g.setColor(this.fontColor);??
  98. ??????????
  99. ????????for(int?i?=startIndex,j=0;?i<?size;?i++,?j++){??
  100. ???????????????
  101. ????????????String?it?=?(String)?items.elementAt(i);??????????
  102. ??????????????
  103. ????????????if(this.selectIndex?==?j){??
  104. ????????????????it?=?(String)?items.elementAt(selectIndex+startIndex);??
  105. ????????????????//this.select.paint(view[X],?height,?view[WIDTH],it.getItemHeight(),g);??
  106. ????????????}else{??
  107. ???????????????????
  108. ????????????}??
  109. ????????????GraphicsUtil.darwString(g,it,?view[X]?+?10,?view[Y]?+?space?*j?+?2);??
  110. ????????????//?变化的高度??
  111. ???????????????
  112. ????????}????
  113. ????}??
  114. ????private?void?paintSelect(Graphics?g,?int?height)?{??
  115. ????????g.setColor(0x909090);??
  116. ????????g.fillRect(view[X],?height,?view[WIDTH],?space);??
  117. ????}??
  118. ??
  119. ????public?void?onClick(int?keyCode)?{??
  120. ????????keyUpAndDown(keyCode);??
  121. ????}??
  122. ??
  123. ????/**?
  124. ?????*?内部实现按钮向上向下时候的动作,有具体类的keyPress调用.?
  125. ?????*??
  126. ?????*?@param?keyCode?
  127. ?????*/??
  128. ????void?keyUpAndDown(int?keyCode)?{??
  129. ????????if(this.numOfEls?==?0)??
  130. ????????????return;??
  131. ????????switch?(keyCode)?{??
  132. ??????
  133. ????????case?Platform.KEY_UP:?{??
  134. ????????????selectIndex--;??
  135. ???????????????
  136. ?????????break;??
  137. ????????????????
  138. ???????????????
  139. ????????}??
  140. ????????case?Platform.KEY_DOWN:?{??
  141. ????????????selectIndex++;??
  142. ???????????????
  143. ?????????????break;??
  144. ????????}??
  145. ????????}??
  146. ????????changeSelectIndex();??
  147. ????}??
  148. ??????
  149. ????/**?
  150. ?????*?判断当前选择条是否到了底部,经过用户的选择,这些选择条会不断的变化
    ?变化的依据是当selectPosition?>=
    ?
  151. ?????*?viewPart[HEIGHT]*/??
  152. ????private?void?changeSelectIndex(){??
  153. ????????int?num?=?(this.paintSize?<?numOfEls)?paintSize:numOfEls;//取可显示的菜单项数目??
  154. ????????if?(selectIndex>num-1)??
  155. ????????{??
  156. ????????????startIndex++;??
  157. ????????????selectIndex=(byte)(num-1);??
  158. ????????}??
  159. ??????????
  160. ????????if?(selectIndex?<?0)??
  161. ????????{??
  162. ????????????if?(startIndex>0)??
  163. ????????????{??
  164. ????????????????selectIndex?=0;??
  165. ????????????????startIndex--;??
  166. ????????????}??
  167. ????????????else??
  168. ????????????{??
  169. ????????????????startIndex?=?numOfEls-num;??
  170. ????????????????selectIndex=num-1;??
  171. ????????????}??
  172. ??????????????
  173. ????????}??
  174. ????????if?(startIndex+?selectIndex?>?numOfEls?-1)??
  175. ????????{??
  176. ????????????startIndex=?0;??
  177. ????????????selectIndex?=?0;??
  178. ????????}??
  179. ????}??
  180. ??
  181. }??
1 楼 为你而来 2006-11-22  
强人,多谢啦!!
2 楼 ouspec 2006-11-22  
恩,不错