路是爬出來的

          [導(dǎo)入] 設(shè)計(jì)可組裝的j2me UI(五) List

                  高級UI中的List控件對于廣大應(yīng)用來說是足夠的。但有些特別需求的功能確不得不自己開發(fā),比如實(shí)現(xiàn)沒一行字體顏色不同,字體樣式不同,還有排版等方面問題時(shí)候則要自己動(dòng)手實(shí)現(xiàn)一個(gè)了。下面把我在項(xiàng)目中學(xué)習(xí)到得經(jīng)驗(yàn)與大家分享下。

                 但是客戶有個(gè)需求,說你這個(gè)List需要翻頁,我要求輸入什么鍵你進(jìn)行上下翻頁。我要求在每一行字體里面包含一些不同顏色得字,根據(jù)XP,好我擁抱需求。所以讓我們來看下怎么修改程序得。

                注意在看這篇文章之錢,請稍微留意下在下得前面幾篇文章。謝謝,^_^

                代碼如下,我會(huì)加比較多得注釋



          java 代碼


           


          1. /******************************************************************** 

          2.  *  

          3.  * 版權(quán)說明,此程序僅供學(xué)習(xí)參考。不能用于商業(yè) 

          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.  * 程序功能描述:實(shí)現(xiàn)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.    /** 主要是根據(jù)屏幕變化而改變各個(gè)StringItem的位置跟當(dāng)前屏幕可以顯示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.      * 內(nèi)部實(shí)現(xiàn)按鈕向上向下時(shí)候的動(dòng)作,有具體類的keyPress調(diào)用. 

          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.      * 判斷當(dāng)前選擇條是否到了底部,經(jīng)過用戶的選擇,這些選擇條會(huì)不斷的變化

             變化的依據(jù)是當(dāng)selectPosition >=
             

          151.      * viewPart[HEIGHT]*/  

          152.     private void changeSelectIndex(){  

          153.         int num = (this.paintSize < numOfEls)?paintSize:numOfEls;//取可顯示的菜單項(xiàng)數(shù)目  

          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)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 嵊州市| 塔城市| 沁阳市| 乡城县| 青川县| 五河县| 渭南市| 司法| 丹巴县| 满城县| 岳西县| 清流县| 慈溪市| 长泰县| 白城市| 阳曲县| 基隆市| 德阳市| 保靖县| 宁波市| 丰宁| 渝中区| 新野县| 寻乌县| 库尔勒市| 宁乡县| 左权县| 枣庄市| 大方县| 铁力市| 电白县| 沧源| 东宁县| 枣庄市| 蓬莱市| 台前县| 汉川市| 承德县| 临西县| 凯里市| 皮山县|