路是爬出來的

          [導入] 設計可組裝的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. }  



          文章來源: http://wuhua.javaeye.com/blog/35427

          posted on 2006-12-30 08:42 路是爬出來的 閱讀(92) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 元阳县| 灌南县| 平原县| 尼木县| 新泰市| 介休市| 道真| 延吉市| 府谷县| 车致| 汾西县| 广宁县| 炎陵县| 唐河县| 上蔡县| 舒城县| 丰台区| 资阳市| 柳州市| 梨树县| 元谋县| 宁化县| 鸡东县| 隆林| 瑞昌市| 左云县| 新和县| 攀枝花市| 徐闻县| 育儿| 咸宁市| 且末县| 沁源县| 合山市| 武功县| 古浪县| 金昌市| 黎城县| 山西省| 抚州市| 吉林省|