路是爬出来的

设计可组装的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(021, 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. }  


posted on 2006-12-30 09:24 路是爬出来的 阅读(149) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: