设计可组装的j2me UI(五) List
??????? 高级UI中的List控件对于广大应用来说是足够的。但有些特别需求的功能确不得不自己开发,比如实现没一行字体颜色不同,字体样式不同,还有排版等方面问题时候则要自己动手实现一个了。下面把我在项目中学习到得经验与大家分享下。
?????? 但是客户有个需求,说你这个List需要翻页,我要求输入什么键你进行上下翻页。我要求在每一行字体里面包含一些不同颜色得字,根据XP,好我拥抱需求。所以让我们来看下怎么修改程序得。
????? 注意在看这篇文章之钱,请稍微留意下在下得前面几篇文章。谢谢,^_^
????? 代码如下,我会加比较多得注释
java 代码
?
- ?
- ?
- ?
- ?
- ??
- package?org.pook.ui;??
- ??
- import?java.util.Vector;??
- ??
- import?javax.microedition.lcdui.Graphics;??
- import?javax.microedition.lcdui.Image;??
- ??
- import?org.pook.ui.core.Platform;??
- import?org.pook.ui.util.GraphicsUtil;??
- ???
- ??
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ??
- public?class?List?extends?Part?{??
- ????Image?icon;??
- ????Vector?items;????????
- ????int?numOfEls;???
- ????int?paintSize;??
- ????int?space;??
- ??????
- ????private?int?startIndex;??
- ????
- ????public?List(Image?icon)?{??
- ????????super(0,?21,?Platform.WIDTH,?Platform.HEIGHT?-?41);??
- ????????this.icon?=?icon;??
- ????????items?=?new?Vector();??
- ???????????
- ????}??
- ???
- ?? ?
- ?
- ????public?void?changeViewAndSize(){??
- ????????if?(Platform.HEIGHT?-?20?>?view[HEIGHT])?{??
- ????????????view[HEIGHT]?=?Platform.HEIGHT?-?41;??
- ????????????space?=?font.getHeight()?+?2;??
- ????????????paintSize??=?view[HEIGHT]?/?space;??
- ????????}??
- ????}??
- ???
- ????public?void?append(Vector?items){??
- ????????if(items?==?null)??
- ????????????return;??
- ????????this.items?=?items;??
- ????????this.numOfEls?=?items.size();??
- ????}??
- ??
- ????public?void?append(String?stringItem){??
- ????????this.items.addElement(stringItem);??
- ????????this.numOfEls?=?items.size();??
- ????}??
- ??????
- ??????
- ????public?void?insert(String?stringItem){??
- ????????this.items.insertElementAt(stringItem,0);??
- ????????this.numOfEls?=?items.size();??
- ????}??
- ??????
- ????public?int?getSelectIndex(){??
- ????????return?this.selectIndex;??
- ????}??
- ??????
- ????public?String?getSelectString(){??
- ??????????
- ????????return?(String)?this.items.elementAt(selectIndex+startIndex?);??
- ????}??
- ??????
- ????public?void?paint(Graphics?g)?{??
- ????????changeViewAndSize();??
- ????????GraphicsUtil.fillScreen(g,?this.bgColor,?view[X],?view[Y],?view[WIDTH],?view[HEIGHT]);??
- ????????paintStrings(g);??
- ????}??
- ??
- ????private?void?paintStrings(Graphics?g)?{??
- ??????
- ????????if?(items.size()?==?0)??
- ????????????return;??
- ????????int?size?=?this.paintSize?>?this.numOfEls??this.numOfEls:this.paintSize?+?startIndex;??
- ??????????
- ????????paintSelect(g,?view[Y]?+?space?*?selectIndex?+?2?);??
- ??????????
- ????????g.setColor(this.fontColor);??
- ??????????
- ????????for(int?i?=startIndex,j=0;?i<?size;?i++,?j++){??
- ???????????????
- ????????????String?it?=?(String)?items.elementAt(i);??????????
- ??????????????
- ????????????if(this.selectIndex?==?j){??
- ????????????????it?=?(String)?items.elementAt(selectIndex+startIndex);??
- ??????????????????
- ????????????}else{??
- ???????????????????
- ????????????}??
- ????????????GraphicsUtil.darwString(g,it,?view[X]?+?10,?view[Y]?+?space?*j?+?2);??
- ??????????????
- ???????????????
- ????????}????
- ????}??
- ????private?void?paintSelect(Graphics?g,?int?height)?{??
- ????????g.setColor(0x909090);??
- ????????g.fillRect(view[X],?height,?view[WIDTH],?space);??
- ????}??
- ??
- ????public?void?onClick(int?keyCode)?{??
- ????????keyUpAndDown(keyCode);??
- ????}??
- ??
- ?????
- ?
- ?
- ?
- ??
- ????void?keyUpAndDown(int?keyCode)?{??
- ????????if(this.numOfEls?==?0)??
- ????????????return;??
- ????????switch?(keyCode)?{??
- ??????
- ????????case?Platform.KEY_UP:?{??
- ????????????selectIndex--;??
- ???????????????
- ?????????break;??
- ????????????????
- ???????????????
- ????????}??
- ????????case?Platform.KEY_DOWN:?{??
- ????????????selectIndex++;??
- ???????????????
- ?????????????break;??
- ????????}??
- ????????}??
- ????????changeSelectIndex();??
- ????}??
- ??????
- ?????
- ?
- ??
- ????private?void?changeSelectIndex(){??
- ????????int?num?=?(this.paintSize?<?numOfEls)?paintSize:numOfEls;??
- ????????if?(selectIndex>num-1)??
- ????????{??
- ????????????startIndex++;??
- ????????????selectIndex=(byte)(num-1);??
- ????????}??
- ??????????
- ????????if?(selectIndex?<?0)??
- ????????{??
- ????????????if?(startIndex>0)??
- ????????????{??
- ????????????????selectIndex?=0;??
- ????????????????startIndex--;??
- ????????????}??
- ????????????else??
- ????????????{??
- ????????????????startIndex?=?numOfEls-num;??
- ????????????????selectIndex=num-1;??
- ????????????}??
- ??????????????
- ????????}??
- ????????if?(startIndex+?selectIndex?>?numOfEls?-1)??
- ????????{??
- ????????????startIndex=?0;??
- ????????????selectIndex?=?0;??
- ????????}??
- ????}??
- ??
- }??