论坛首页 移动开发技术论坛

设计可组装的j2me UI(五) List

浏览 6622 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-22  
        高级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. }  
   发表时间:2006-11-22  
强人,多谢啦!!
0 请登录后投票
   发表时间:2006-11-22  
恩,不错
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics