路是爬出來的

          #

          設計可組裝的j2me UI(二) 一些系統邊緣核心的開發

          大家都知道。設計一個好的軟件,無非是要求程序穩定,可擴展,可修改跟可移值。在沒有出現j2me之前,寫手機程序是一件很痛苦的事情。因為你要針對很多的機型進行設計,因此導致了很少人會去涉及。因為設計這樣的程序對程序員來說是個挑戰。現在不同了。有了j2me使開放手機軟件變的容易,而且很快樂。
          定義一個與平臺無關的各個參數的類,比如把按鍵的鍵值放在這里。這樣以后修改起來就很方便。

          代碼

          代碼

          代碼

          以上是本人經過互聯網學習,上面的一些代碼出自一些開源的。
          大家可以按照需要修改。共同學習。

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(101) | 評論 (0)編輯 收藏

          設計可組裝的j2me UI(四) 時間控件

                 開放過項目的人都知道。用戶的需求是時刻變化的。我們要做到的只是不斷的去適應這種變化。因為給錢的是人家。

                 今天這篇文章讓我們來學習怎么樣設計一個可以在j2me低級UI上顯示的時鐘。經過前面幾篇文章相信大家都知道我的UI設計思路了。我們現在要做的就是設計一個Part(這個是什么來的,呵呵。如果沒看過我前面文章的朋友們,建議你們先讀下,我想會有好處的。^_^)。

                我的控件思路是這樣的。首先在整個屏幕中拿出一小塊出來。然后在這一小塊里面繪制顯示時間(時間可以是純文字,也可以是圖片等),然后我們實現Runnable接口,讓它沒秒鐘都刷新一下那一小塊屏幕。是不是很簡單呢。呵呵。下面讓我們來看下具體代碼吧

          java 代碼


           


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

          2.  * 

          3.  * 版權說明,此程序僅供學習參考。不能用于商業 

          4.  * 

          5.  ********************************************************************/  

          6. package org.pook.ui;  

          7.   

          8. import java.util.TimerTask;  

          9.   

          10. import javax.microedition.lcdui.Display;  

          11. import javax.microedition.lcdui.Displayable;  

          12. import javax.microedition.lcdui.Graphics;  

          13.   

          14. import org.pook.file.BookFileManager;  

          15. import org.pook.log.Log;  

          16. import org.pook.ui.core.Platform;  

          17. import org.pook.ui.form.Panel;  

          18. import org.pook.ui.timer.TimerTaskManager;  

          19. import org.pook.ui.util.GraphicsUtil;  

          20. import org.pook.util.DateTime;  

          21.   

          22. /** 

          23.  * 類名:TimerPart.java 

          24.  

          25.  * 編寫日期: 2006-9-29 

          26.  

          27.  * 程序功能描述?? 

          28.  

          29.  * Demo: 

          30.  

          31.  * Bug: 

          32.  

          33.  * 

          34.  * 程序變更日期 

          35.  

          36.  * 變更作??? 

          37.  

          38.  * 變更說明 

          39.  

          40.  * 

          41.  * @author wuhua 

          42. rrq12345@163.com 

          43.  */  

          44. public class TimerPart extends Part implements Runnable{  

          45.   

          46.     Log log = Log.getLog("TimerPart");  

          47.      

          48.     /** 時間顯示字段     */  

          49.     private static int hour ;  

          50.     private static int minute;  

          51.     private static int second;  

          52.      

          53.     private static String time;  

          54.      

          55.     /** 用于執行消失窗口 */  

          56.     protected TimerTask task;  

          57.      

          58.     /** 獲取系統時間 **/  

          59.     private DateTime dt;  

          60.      

          61.      

          62.      

          63.     private Display display;  

          64.     private Displayable displayable;  

          65.   

          66.     private String h;  

          67.   

          68.     private String m;  

          69.   

          70.     private String s;  

          71.      

          72.     public TimerPart(Display display) {  

          73.         super(Platform.WIDTH - 4504520);  

          74.         dt = new DateTime();  

          75.         hour = dt.hour ;  

          76.         minute = dt.minute ;  

          77.         second = dt.second ;  

          78.    

          79.          time = hour + ":" + minute + ":" + second;  

          80.            

          81.        

          82.         task = TimerTaskManager.getInstace().add(this1000);  

          83.         this.display = display;  

          84.     }  

          85.   

          86.     public void paint(Graphics g) {  

          87.         g.setColor(0x00000);  

          88.         g.drawString(time.toString(), view[X], view[Y], Graphics.TOP |  

          89.                 Graphics.LEFT);  

          90.     //    GraphicsUtil.darwString(g,new Boolean(BookFileManager.available()).toString(), view[X], view[Y]);  

          91.   

          92.     }  

          93.   

          94.     public void onClick(int keyCode) {  

          95.        

          96.     }  

          97.   

          98.     /** 

          99.      * 刷新時間的方法,每隔1秒鐘刷新???? 

          100.      */  

          101.     public void run() {  

          102.            

          103.          

          104.         //更新時間  

          105.          updateTime();  

          106.          repaintTime();  

          107.          

          108.     }  

          109.      

          110.     /** 

          111.      * 這里本不應該與程序又任何關聯的???但考慮到?????? 

          112.      * ??以就先這樣先 

          113.      * 

          114.      */  

          115.     private void repaintTime() {  

          116.         if(display == null)  

          117.             return;  

          118.         displayable = display.getCurrent();  

          119.         if(displayable instanceof Panel){  

          120.             Panel panel = (Panel)displayable;  

          121.             panel.repaintTimer();  

          122.         }  

          123.     }  

          124.   

          125.     /** 

          126.      * 更新時間,頻率是1?? 

          127.      * 

          128.      */  

          129.     private void updateTime() {  

          130.         second ++ ;  

          131.         if(second == 60){  

          132.             second = 0;  

          133.             minute ++ ;  

          134.         }  

          135.          

          136.         if(minute == 60){  

          137.             minute = 0;  

          138.             hour ++ ;  

          139.         }  

          140.          

          141.         if(hour == 24 && minute == 0){  

          142.             hour = 00;  

          143.         }  

          144.          

          145.         h =   hour<10?("0"+hour):hour + "" ;  

          146.         m =    minute<10?("0"+minute):minute + "";  

          147.         s =   second<10?("0"+second):second + "";  

          148.          

          149.         time = h + ":" + m + ":" + s;  

          150.     }  

          151.   

          152.   

          153.   

          154.   

          155. }  







          具體的詳細例子在: 手機電子書閱讀軟件基本框架  wuhua.javaeye.com/admin/show/28821

          看看這圖片:

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(456) | 評論 (0)編輯 收藏

          25歲男人必讀(轉)

          1.男人是社會的主體,不管你信或不信.所以男人應該有種責任感.



          2.25歲之前,請記得,愛情通常是假的,或者不是你所想象的那樣純潔和永遠.如果你過了25歲,那么你應該懂得這個道理.





          3.吃飯7成飽最舒服.對待女友最多也請你保持在7成.



          4.30歲之前請愛惜自己的身體,前30年你找病,后30年病找你.如果你過了30歲,你自然也會懂得這個道理.



          5.事業遠比愛情重要.如果說事業都不能永恒,那么愛情只能算是曇花一現.



          6.不要輕易接受追求你的女孩.女追男隔層紗.如果你很容易就陷進去,你會發現你會錯過很多東西,失去很多東西.



          7.請你相信,能用錢解決的問題,都不是問題.如果你認為錢索王道,有錢有女人,沒錢沒女人,那么.女人不是問題.



          8.請永遠積極向上.每個男人都有他可愛的地方,但是不可愛的地方只有不積極面對生活.



          9.不要連續2次讓同一個女人傷害.好馬不吃回頭草,是有他道理的.如果認真考慮過該分手,那么請不要做任何舍不得的行動.



          10.如果你和你前女友能做朋友,那么你要問自己:為什么?如果分手后還是朋友,那么只有2個可能:.你們當初都只是玩玩而已,沒付出彼此最真的感情.或者:必定有個人是在默默的付出無怨無悔!



          11.永遠不要太相信女人在戀愛時的甜言蜜語.都說女人愛聽甜言蜜語,其實,男人更喜歡.



          12.請不要為自己的相貌或者身高過分擔心和自卑.人是動物,但是區別于動物.先天條件并不是阻擋你好好生活的借口.人的心靈遠勝于相貌,請相信這點.如果有人以相貌取人,那么你也沒必要太在意.因為他從某種意義來講,只是只動物.你會跟動物慪氣嗎?



          13.失戀時,只有2種可能,要么你愛她她不愛你,或者相反.那么,當你愛的人不再愛你,或者從來沒愛過你時.你沒有遺憾,因為你失去的只是一個不愛你的人.



          14.請不要欺騙善良的女孩.這個世界上,善良的女孩太少.



          15.不能偏激的認為金錢萬能,至少,金錢治不好艾滋病.



          16.請一定要有自信.你就是一道風景,沒必要在別人風景里面仰視.



          17.受到再大的打擊,只要生命還在,請相信每天的太陽都是新的.



          18.愛情永遠不可能是天平.你想在愛情里幸福就要舍得傷心.



          19.如果你喜歡一個認為別人應該對她好的mm,請盡早放棄.沒有人是應該對一個人好的.如果她不明白這個道理,也就是她根本不懂得珍惜.



          20.不要因為寂寞而’找’gf,寂寞男人請要學會品味寂寞.請記住:即使寂寞,遠方黑暗的夜空下,一定有人和你一樣,寂寞的人不同,仰望的星空卻是唯一.



          21.任何事沒有永遠.也別問怎樣才能永遠.生活有很多無奈.請盡量充實自己,充實生活.請善待生活.



          End.男人有很多無奈,生活很累但是因為生活才有意義.當你以為你一無所有時,你至少還有時間,時間能撫平一切創傷.所以請不要流淚

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(126) | 評論 (0)編輯 收藏

          如何預防電腦輻射(轉自j2medev)

          原文出自

          www.j2medev.com/blog/user1/32652/archives/2006/1819.html



          關于電腦輻射的危害大家一定都很清楚,但恐怕并非每個人都清楚該怎樣預防電腦輻射,于是在下轉了幾個帖,考慮到我們整天都坐在電腦面前,為了我們的健康,抽點時間,關心一下,相信一定對你有百利而無一害。



          一 防電腦輻射10招

          電腦輻射是不可避免的,但可以減少。以下是一些預防電腦輻射的方法:



          1.應盡可能購買新款的電腦,一般不要使用舊電腦,舊電腦的輻射一般較厲害,在同距離、同類機型的條件下,一般是新電腦的1-2倍。



          2.注意室內通風。科學研究證實,電腦的熒屏能產生一種叫溴化二苯并呋喃的致癌物質。所以,放置電腦的房間最好能安裝換氣扇,倘若沒有,上網時尤其要注意通風。



          3.電腦擺放位置很重要。盡量別讓屏幕的背面朝著有人的地方,因為電腦輻射最強的是背面,其次為左右兩側,屏幕的正面反而輻射最弱。



          4.室內不要放置閑雜金屬物品,以免形成電磁波的再次發射。



          5.操作電腦時最好在顯示屏上安一塊電腦專用濾色板以減輕輻射的危害。



          6.使用電腦時,要調整好屏幕的亮度,一般來說,屏幕亮度越大,電磁輻射越強,反之越小。不過,也不能調得太暗,以免因亮度太小而影響效果,且易造成眼睛疲勞。



          7.使用電腦時,還要注意與屏幕保持適當距離。離屏幕越近,人體所受的電磁輻射越大,因此較好的是距屏幕半米以外。



          8.使用電腦后,臉上會吸附不少電磁輻射的顆粒,因此,要及時用清水洗臉,這樣將使所受輻射減輕70%以上。



          9.可在電腦桌前放置一盆仙人掌,這樣有助于減少輻射。



          10. 要注意飲食。對于生活緊張而忙碌的人群來說,抵御電腦輻射最簡單的辦法就是在每天上午喝2至3杯的綠茶,吃一個橘子。茶葉中含有豐富的維生素A原,它被人 體吸收后,能迅速轉化為維生素A。維生素A不但能合成視紫紅質,還能使眼睛在暗光下看東西更清楚,因此,綠茶不但能消除電腦輻射的危害,還能保護和提高視 力。如果不習慣喝綠茶,菊花茶同樣也能起著抵抗電腦輻射和調節身體功能的作用。



          二 防電腦輻射有妙招

          關鍵詞語:注意酌情多吃一些胡蘿卜、豆芽、西紅柿、瘦肉、動物肝等富含維生素A、C和蛋白質的食物,經常喝些綠茶等等。





          使用電腦時,最好在顯示器前配備質量較好的防輻射屏。注意酌情多吃一些胡蘿卜、豆芽、西紅柿、瘦肉、動物肝等富含維生素A、C和蛋白質的食物,經常喝些綠茶等等。





          對于生活緊張而忙碌的人群來說,抵御電腦輻射最簡單的辦法就是在每天上午喝2至3杯的綠茶,吃一個橘子。茶葉中含有豐富的維生素A原,它被人體吸收后, 能迅速轉化為維生素A。維生素A不但能合成視紫紅質,還能使眼睛在暗光下看東西更清楚,因此,綠茶不但能消除電腦輻射的危害,還能保護和提高視力。如果不 習慣喝綠茶,菊花茶同樣也能起著抵抗電腦輻射和調節身體功能的作用。





          電腦輻射是不可避免的,但可以減少。首先,應盡可能 購買新款的電腦,一般不要使用舊電腦,舊電腦的輻射一般較厲害,在同距離、同類機型的條件下,一般是新電腦的1-2倍。操作電腦時最好在顯示屏上安一塊電 腦專用濾色板以減輕輻射的危害,室內不要放置閑雜金屬物品,以免形成電磁波的再次發射。使用電腦時,要調整好屏幕的亮度,一般來說,屏幕亮度越大,電磁輻 射越強,反之越小。不過,也不能調得太暗,以免因亮度太小而影響效果,且易造成眼睛疲勞。還要注意與屏幕保持適當距離。離屏幕越近,人體所受的電磁輻射越 大,因此較好的是距屏幕半米以外。





          電腦使用后,臉上會吸附不少電磁輻射的顆粒,要及時用清水洗臉,這樣將使所受輻射減輕70%以上。





          仙人掌除了可以攻擊壞人,還有一項好處喔!據說在計算機桌前放置一仙人掌有助于減少輻射。





          常用電腦的人會感到眼睛不適,視力下降,易有疲勞的感覺。常用電腦的人在飲食上應注意以下幾方面:





          吃一些對眼睛有益的食品,如雞蛋、魚類、魚肝油、胡蘿卜、菠菜、地瓜、南瓜、枸杞子、菊花、芝麻、蘿卜、動物肝臟等。





          多吃含鈣質高的食品,如豆制品、骨頭湯、雞蛋、牛奶、瘦肉、蝦等。





          注意維生素的補充:多吃含有維生素的新鮮水果、蔬菜等。





          注意增強抵抗力:多吃一些增強機體抗病能力的食物,如香菇、蜂蜜、木耳、海帶、柑桔、大棗等。





          吃一些抗輻射的食品:電腦雖然對人體健康影響較小,但也應預防。飲茶能降低輻射的危害,茶葉中的脂多糖有抗輻射的作用。螺旋藻、沙棘油也具有抗輻射的作用。





          另外,用完電腦應洗臉,平時應注意鍛煉身體。





          電腦擺放位置很重要。盡量別讓屏幕的背面朝著有人的地方,因為電腦輻射最強的是背面,其次為左右兩側,屏幕的正面反而輻射最弱。以能看清楚字為準,至少也要50厘米到75厘米的距離,這樣可以減少電磁輻射的傷害。





          注意室內通風:科學研究證實,電腦的熒屏能產生一種叫溴化二苯并呋喃的致癌物質。所以,放置電腦的房間最好能安裝換氣扇,倘若沒有,上網時尤其要注意通風。





          三 如何避免電腦輻射

          電腦在使用過程中,顯示屏會發出電磁、電離輻射。經常在電腦前工作,會使人體皮膚老化,造成皮膚粗糙,甚至還會引起皮膚發炎等病變。要防止電腦輻射,應從以下己方面入手:



          在 選購電腦時,應盡可能購買新的保健型綠色電腦,一般不要使用舊電腦,舊電腦的輻射劑量較大,在同距離、同類機型的條件下,一般是新電腦的1--2倍。操作 電腦時最好在顯示屏上安一塊電腦專用濾色板以減輕輻射的危害,室內不要放置閑雜金屬物品,以免形成電磁波的再次發射。





          使用電腦時,要調整好屏幕的亮度,一般來說,屏幕亮度越大,電磁輻射越強,反之越小。不過,也不能調得太暗,以免因亮度太小而影響收視效果,且易造成眼睛疲勞。



          在操作電腦時,要注意與屏幕保持適當距離。離屏幕越近,人體所受的電磁輻射越大,因此較好的是距屏幕0.5M以外。





          此外,在操作電腦后,臉上會吸附不少電磁輻射的顆粒,要及時用清水洗臉,這樣將使所受輻射減輕70%以上。



          四 喝酸奶能減輕電腦輻射



          早晚喝一杯牛奶已經成為很多人的好習慣,可你知道嗎,午飯時或午飯后喝一杯酸奶,對健康也能起到重要的作用。



          根據統計資料顯示,我們每天早餐的熱能供應占當日總熱能需求的25%-30%,因此,早餐時喝一杯牛奶能夠有效地補充熱能;晚上臨睡前喝一杯則有助于增加睡眠質量,讓你進入深度熟睡狀態,還能保證牛奶營養的充分吸收和消化。



          那么,午餐時喝酸奶有什么好處呢?專家指出,酸奶中含有大量的乳酸、醋酸等有機酸,它們不僅賦予了酸奶清爽的酸味,還能幫助它形成細嫩的凝乳,從而抑制 有害微生物的繁殖,同時,使腸道的堿性降低,酸性增加,促進胃腸蠕動和消化液的分泌。此外,隨著酸奶的生產技術、生產工藝不斷進步,一些乳品大品牌,如蒙 牛等,已經將其酸奶產品中的益生菌由2種變成了4種,這樣不僅酸奶的營養價值比同類產品有了明顯提高,其幫助消化、抑制有害菌的作用也得到了進一步的加 強。



          千萬別小看酸奶的這些作用,這對于那些吃完午餐就坐在電腦前不再活動,容易導致消化不良或脂肪積累的上班族來說,非常有益。同 時,酸奶中的酪氨酸對于緩解心理壓力過大、高度緊張和焦慮而引發的人體疲憊有很大的幫助。經過乳酸菌發酵,酸奶中的蛋白質、肽、氨基酸等顆粒變得微小,游 離酪氨酸的含量大大提高,吸收起來也更容易。午飯時或午飯后喝一杯酸奶,可以讓上班族放松心情,在整個下午都精神抖擻,更有利于提高工作效率。



          據一項最新的研究發現,酸奶還具有減輕輻射損傷、抑制輻射后人的淋巴細胞數目下降的作用。動物實驗證明,攝入酸奶后的小鼠對輻射的耐受力增強,并減輕了 輻射對免疫系統的損害。對于那些長時間面對電腦,每時每刻籠罩在電磁輻射中的上班族來說,利用午飯的時間喝一杯酸奶,對健康非常有益。



          五 隔離霜是否能隔離電腦輻射?

          這也是許多JM關心的一個問題,我個人的答案是不能的。電腦輻射的大部分屬于低頻輻射,它的波長約為6.5cm,而隔離霜和防曬霜針對的主要是波長0.01-0.40微米的紫外線,,JMS可以自己考慮一下它對于電腦輻射有什么作用。





          但是,隔離霜對電腦使用者是有一定好處的。那是因為電腦除了輻射會對人體造成傷害以外,電腦屏幕的靜電效應會吸附大量空氣中的微塵。簡而言之,使用電腦時,我們的皮膚是處在一個相當“臟”的環境中,使用電腦時擦隔離霜可以減少灰塵對皮膚的傷害。







          除此以外,我還了解到有一些防輻用品,介紹如下:

          1.備長炭

          就是一種有吸收電磁波功能的竹炭,曾經在google上搜過,但可惜只了解到在臺灣和日本有賣,價格也很貴,要600元左右。

          下面也是從別的地方轉過來的:



          竹炭防輻射的原理

          經1000 度以上高溫燒成的竹炭,竹子高溫炭化后具有導電性。當年愛迪生在尋找燈泡導電材料時,曾使用高溫燒制的竹炭,當成燈泡中導電燈絲。在電器周圍擺放具有導電 性能的竹炭,籍著竹炭的良好導電性能,將周圍電器形成的電磁波引導排除——這種作用就有點像利用避電針來防止打雷時被雷擊。



          在接觸身體較頻繁的電器(如電視、電腦、微波爐)周邊,擺放竹炭,對電磁波具有某種程度阻隔效果,間接促進身體健康。例如在電視等電器前后左右都放上數根竹炭,或在旁邊置放一整簍(到少1。5公斤)以上竹炭,就可阻隔部分電磁波。



          另外科學家們正積極研究以竹炭做出[防護罩],用來罩住電器產生的電磁波。



          2.種植物

          聽說種闊葉型的植物能有效地吸收電磁波,但前提是規模要達到熱帶雨林的程度,不太可行



          3.低頻輻射消除器

          是一種像接線板一樣的東西。

          下面是引用廣告里的一句話,估計有偏頗:

          此產品能在電源供應同時,改變電荷運動方向,瞬間將主機、顯示器、鍵盤、鼠標、打印機、掃描儀等產生的有害電磁波輻射經由電源零線回路徹底導除。

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(140) | 評論 (0)編輯 收藏

          設計可組裝的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 @ 2006-12-30 09:24 路是爬出來的 閱讀(152) | 評論 (0)編輯 收藏

          MIDP 2.0安全機制 與 MIDlet 數字簽名(轉自j2medev)

          本篇文章轉自www.j2medev.com/bbs/dispbbs.asp
















          MIDP 2.0安全機制 與 MIDlet 數字簽名

           

                    本文檔是 WoTrust 根據 Forum Nokia 提供的技術文檔《MIDP 2.0: Tutorial On Signed MIDlets》翻譯整理的,請同時參考此英文原文文檔。請用戶在編寫 MIDlet 和簽名 MIdlet 之前閱讀此文檔,以便對 MIDP2.0 的安全機制有一個深刻的理解,有助于用戶能用好 MIDlet 代碼簽名證書。


           一、概述


              MIDP2.0 采用了全新的安全機制,這對于需要調用一個敏感的(重要的)函數和 API 的 MIDlet 開發者來講是必須了解的,如:網絡連接 API 、消息 API 和推 (Push) 函數等,還有一些可選的 MIDP 包也有許多受限制的 API 。


              雖然購買代碼簽名證書需要費 用,但簽名 MIDlet 對開發者來講是收益非淺的,因為許多受保護的 API 都是需要簽名的,以保護開發者和用戶的利益。當然,有些應用是不需要簽名的,如有些不需要聯網的僅用到一些圖形 API 的小游戲軟件。但一些重要的應用,如:連接網絡、發送短消息 ( 短信和彩信 ) 或訪問移動終端 ( 智能手機、 PDA 等,以下簡稱為手機 ) 上的 PIM( 個人信息管理 ) 數據等等都需要簽名。


              數字簽名 MIDlet 的好處包括:


              (1) 基于 MIDlet 的安全策略,某些功能是必須簽名才能使用的,而有些功能雖然不簽名也可以使用,但必須要求用戶在使用時確認和修改其安全策略,如:寫用戶數據缺省是不允許沒有簽名的 MIDlet 操作的;


              (2) 基于手機的系統安全和移動網絡的安全考慮,某些手機制造商、移動運營商等可能拒絕沒有簽名的 MIDlet 在手機上安裝和運行;


              (3) 大大改善用戶體驗,讓用戶使用方便,使得用戶不會遭遇調用受保護 API 時的安全警告的煩惱;


              (4) 出于安全考慮,安裝沒有簽名的 MIDlet 是會有安全警告的,而相反,安裝已經簽名的 MIDlet 則不會出現煩人的警告,手機會自動驗證簽名而順利地安裝成功;


              (5) 已經簽名的 MIDlet 將使得用戶能改善其低安全策略設置,提高手機的安全性;


              (6) 確保已經簽名的 MIDlet 不會被非法篡改和非法盜用。


          二、 MIDP 2.0 安全機制


              MIDP 是一個開放的平臺,使得任何人都可以為支持 MIDP 的設備開發各種應用軟件,一般都是移動終端設備。 MIDlet 套件可以以匿名方式通過網絡下載,非常方便,但這也會帶來許多安全問題和隱私信息保護問題,用戶會問: MIDlet 能把用戶的個人信息發給不知道的服務器嗎?會自動產生沒有授權的呼叫或短消息而給用戶帶來費用嗎?惡意軟件會破壞手機?等等。


               除了 Java 語言的安全特性外, MIDP 還增加了許多安全考慮。 MIDP 2.0 比 MIDP 1.0 增強了安全策略,把 API 分為普通 API 和敏感 API ,如:通過  HTTP 協議訪問移動網絡,由于會給用戶產生費用, 所以被列為 敏感 API 。 MIDlet 2.0 推出了可信任 MIDlet(trusted) 和不可信任 MIDlet(untrusted) 的概念,一個不可信任 MIDlet 只能訪問有限的 API ,同時還需要用戶手動確認并修改其安全策略;而可信任 MIDlet 則自動繼承系統中的安全策略而獲得訪問許可。


               許可 (Permissions) 用于需要身份認證的 敏感 API 。 MIDP 2.0 要求調用 敏感 API 之前必須獲得必要的許可,這些許可包的命名同 J2SE 許可,如: HTTP 連接許可同樣稱為: javax.microedition.io.Connector.http 。 有關許可的文檔同意歸類在受保護 API 中。


          2.1 Protection Domains( 保護域 )


               保護域是 MIDP 2.0 中一個非常重要的安全概念,一個保護域就是一個許可集和一種交互模式,這些許可既可以是自己繼承的,也可能是用戶設置的,前者稱為允許 (allowed) ,而后者稱為用戶允許 (user permission) 。當一個 MIDlet 被安裝后,它被分配到一個指定的保護域而獲得它的許可和交互模式。


              而用戶允許則需要用戶自己決定是否同意,用戶既拒絕一個許可,也可以同意。用戶允許有 3 種交互模式: blanket( 普遍適用 ) 、 session( 短期適用 ) 和 oneshot( 本次適用 ) , 普遍適用 模式就是 MIDlet 安裝時獲得的許可一直有效,除非用戶取消這些許可;而 短期適用 模式則是指第一次調用 API 時需要用戶允許,有效期到此 MIDlet 套件運行結束;而 本次適用 模式則在每次調用 API 時都要求用戶允許。保護域為用戶許可定義了缺省的交互模式。


              一個 MIDlet 套件使用 MIDlet-Permissions MIDlet-Permissions-Opt 屬性來明確地定義其許可,可以是在 JAD 文件中定義,也可以在 manifest 文件中定義。其中: MIDlet-Permissions 定義了 MIDlet 套件中必須具有的許可,而 MIDlet-Permissions-Opt 則定義希望具有的許可。如:一個應用軟件的基本要求是要有 http 連接才能正常工作,同時,也可以使用 https 連接 ( 服務器部署了 SSL 證書 ) 來增強安全性,但不是必須的,這樣,這個應用軟件的應用描述可以是這樣:


                  MIDlet-Permissions: javax.microedition.io.Connector.http


                  MIDlet-Permissions-Opt: javax.microedition.io.Connector.https


               請注意:一個 MIDlet 所要求的許可必須是安裝時分配的保護域所具有的許可的子集。如: Nokia S60 MIDP Emulator Prototype 2.0 (SDK) 有一個叫做“ minimum ”的域,此域沒有任何許可。所以,如果一個含有許多許可的已經簽名的 MIDlet 如果被安裝到此域,則會安裝失敗,因為此域不支持這些許可。同樣,如果一個許可的名稱有拼寫錯誤,則一樣會導致安裝失敗,因為域中沒有此拼寫錯誤的許可。


              MIDP 2.0 為 GSM/UTMS 設備定義了 4 種保護域: manufacturer( 設備制造商 ) , operator( 移動運營商 ) , trusted third party( 可信任的第三方 ) , and untrusted( 不受信任域 ) , 除了 untrusted 域外,每個保護域都對應一組根證書,用于簽名 MIDlet 的簽名證書的根證書必須包含在這些根證書中,使用不同的簽名證書簽名的 MIDlet 將被自動歸類予根證書所屬的保護域,根證書與保護域的關系是:一個保護域可以有許多個根證書,而一個根證書只能對應于一個保護域。


              具體來講, manufacturer 域屬于設備制造商,其根證書是設備制造商自己的根證書;而 operator 域運營商,一般使用其 SIM 卡中的根證書;而 trusted third party 域則預置了全球知名的數字證書頒發機構 (CA) 的根證書,用于驗證由 CA 頒發的 MIDlet 簽名證書;而 untrusted 域沒有根證書,將用于沒有簽名的 MIDlet 和 MIDP 1.0 。


              Thawte 和 VeriSign 的根證書已經預置在 trusted third party 域 中,其 Java 代碼簽名證書可以用于簽名 MIDlet 。當然,用戶也可以選擇使用設備制造商和移動運營商頒發的證書,只要其根證書已經包含在手機的 4 個保護域中。據 WoTrust 了解,大多數摩托羅拉 (Motorola) 手機只支持設備制造商域,所以,只能向 Motorola 申請簽名服務了。


              請注意:由于 MIDP 2.0 也在不斷地修改和增補,所以,可能不用的移動網絡運營商有不同的保護域和許可,用戶可能需要向移動運營商了解詳細信息。而最簡單的方法是檢查目標用戶所使用的手機的根證書是否有計劃購買的 MIDlet 簽名證書的根證書。


          2.2 Untrusted MIDlet ( 不受信任的 MIDlet)


              MIDP 2.0 定義了那些 API 是 untrusted 的,這些 Jar 文件的來源和完整性是不能被手機驗證的。但這并不意味著這些 MIDlet 不能被安裝和運行,而是運行這些 MIDlet 需要用戶人工確認允許。而所有 MIDP 1.0 的 MIDlets 都被定義為 untrusted


              untrusted 的 MIDlets 只能調用一個不需要許可保護的 API ,如:

                  java.util

                  java.lang

                  java.io

                  javax.microedition.rms

                  javax.microedition.midlet

                  javax.microedition.lcdui

                  javax.microedition.lcdui.game

                  javax.microedition.media

                  javax.microedition.media.control


               如果 untrusted MIDlet 套件試圖調用一個被保護的 API 而且沒有被人工允許,則會產生一個 SecurityException 而被 MIDlet 按照安全策略處理。請注意: Nokia 的 UI API 是不被保護的,包括類: com.nokia.mid.sound 和 com.nokia.mid.ui 。


          2.3 Trusted MIDlets ( 可信任的 MIDlets)


               如果手機能驗證 MIDlet 的身份和完整性 ( 也就是已經數字簽名 ) ,則會自動分配一個合適的保護 域這種 MIDlet 套件就稱為可信任的 MIDlet 。一個可信任的 MIDlet 套件所要求的許可將被準許,只要所屬的保護域擁有這種許可,假如許可: javax.microedition.io.Connector.http 已經在所屬保護域中是允許的,則 MIDlet 在打開一個 http 連接時是不需要用戶確認的。


              請不要混淆了可信任的 MIDlet 套件和可信任的保護域的不同,每個可信任的 MIDlet 套件依據安全策略被分配到一個特定的保護域。


               您需要使用一個手機中已經預置的根證書的證書頒發機構頒發的代碼簽名證書來簽名 MIDlet ,否則將不能通過身份驗證。成功簽名后的 JAD 文件中一定會包含有整個簽名證書的證書鏈,屬性名稱為: MIDlet-Certificate-1-1 就是您的簽名證書,而 MIDlet-Certificate-1-2 就是 CA 的中級根證書,而 MIDlet-Certificate-1-3 就是 CA 的頂級根證書。同時還會有一個 MIDlet-Jar-RSA-SHA1 屬性就是 JAR 文件的摘要。


              當一個 MIDlet 被下載或被安裝時, MIDlet 應用管理器首先會檢查 JAD 文件中是否包含了 MIDlet-Jar-RSA-SHA1 屬 性,如果有,則啟動如下驗證過程:首先會讀出 MIDlet-Certificate-1-1 、 MIDlet-Certificate-1-2 和 MIDlet-Certificate-1-3 屬性中的證書,并與已經預置的根證書相比較,如果證書鏈能被根證書驗證,則表明開發者身份已經被驗證。接著就會使用用戶證書來解密 MIDlet-Jar-RSA-SHA1 屬 性的摘要,再計算出已經下載的 Jar 文件的摘要,比較兩個摘要是否相等,如果相等,則表明 MIDlet 代碼自簽名后沒有被修改。這樣,既驗證了身份又檢查了完整性的 MIDlet 會被分配到所屬根證書所對應的保護域中。但是,如果 MIDlet 中的許可屬性 ( MIDlet-Permissions ) 中有一個或多個不屬于所屬的保護域,則仍然不允許安裝。而如果 MIDlet 中的可選許可屬性 ( MIDlet-Permissions-Opt ) 中有一個或多個不屬于所屬的保護域,會允許安裝。可見,正確設置許可屬性和可選許可屬性非常重要。


          2.4 Function Groups ( 功能分組 )


               為了簡化用戶管理操作, MIDlet 把一些類似功能分組,這樣,用戶只需對功能組設置許可即可。如:許可 “Net Access”( 網絡訪問 ) 組來代替許可 javax.microedition.io.Connector.http ,這對于簡化手機的交互操作非常有用。


              MIDP 2.0 和 JTWI 定義了如下 7 個功能組:


              (1) Net Access: 包括所有網絡連接許可;


              (2) Messaging: 包括所有與發送和接收短消息 ( 短信和彩信 等 ) 相關的許可;


              (3) Auto Invocation : 包括與自動啟動 MIDlet 相關的許可,如: Push Registration


              (4) Local Connectivity : 包括與本地連接相關的許可,如: IrDA 或 藍牙;


              (5) Multimedia Recording : 包括與允許錄音、照相、攝像等相關的許可;


              (6) Read User Data : 包括讀取用戶數據相關的許可,如:通訊錄、日程表等;


              (7) Write User Data : 包括寫用戶數據相關的許可。


              不同的手機支持不同的功能組,如: Multimedia Recording 就不會包含在沒有攝錄裝置的手機中。當然,也有可能將來會增加更多的功能組。


               功能組也同時定義了不同的域的不同交互方式,如:在不信任域, “Net Access” ( 網絡訪問 ) 被設置為 session( 短期適用 ) 或 denied( 拒絕 ) ,而在可信任域則可以設置為 oneshot 、 blanket 和 denied 的。


          三、仿真器和手機的缺省安全設置


              讓我們來看看具體的使用 Thawte 或 VeriSign 代碼簽名證書簽名后的 MIDlet 在 trusted third party 域中的所有缺省許可,如下圖 1 所示,點擊 NDS 3.0 的“ Config Emulators ”就可以看到仿真器在 trusted third party 域的缺省安全設置是“ Ask first time ”,即第 1 次使用是需要確認:


          圖片點擊可在新窗口打開查看


              如下圖 2 所示,您可以下拉所有功能組的許可設置,如“ Network Access ”就有 4 個選項可以修改: Ask first time 、 Ask every time 、 Always allowed 和 Not allowed :


          圖片點擊可在新窗口打開查看


               而如下圖 3 所示,在“ Real Life ”模式,也就是實際手機的運行模式,可以看出:定義的 7 個功能組都是“ Always allowed ” ( 總是允許 ) ,這就顯示出 MIDlet 簽名對于開發商來講是多么的重要,將大大方便了用戶的使用,再也不需要用戶操作煩人的系列確認了。


          圖片點擊可在新窗口打開查看


          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(113) | 評論 (0)編輯 收藏

          再次貢獻j2meUI設計源代碼

                   要貢獻就貢獻的徹底,代碼里面很多bug,寫的很亂,請大家見諒。希望大家可以多學習交流。

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(137) | 評論 (0)編輯 收藏

          如何在MIDP中實現圖片放縮(轉自linuxmine)

                設計游戲的朋友經常會遇到對圖片資源的操作。今天瀏覽web發現此貼不錯。所以抄過這邊來

          原文:www.linuxmine.com/45911.html







          無論在midp1.0還是在 midp2.0中,系統都沒有給我們提供對圖片進行伸縮操作的api.但是其實我們只要在程序代碼中略施小計,就能達到這個效果,只是效果要比美術做出來 的圖片,呵呵,差多啦,同時也會造成性能損失。伸縮圖片的構造原理就是簡單沿x,y軸按比例放縮,比如說我們需要把一張16*16的png圖片轉化成一張 32*32的圖片,那么我們可以先對該圖片做一個水平方向上的拉伸操作,然后再把水平拉伸后的圖片按垂直方向再做一次拉伸操作。做拉伸操作時,比如水平方 向上,我們需要構造一張32*16的mutable Image,獲取其Graphics,利用該Graphics,繪制該mutable Graphics的每一列像素,這一列像素就來自于原始圖片中的按比例對應的某一列像素。垂直方向上的拉伸操作也是如法炮制。因為是一種按比例的對應關 系,圖像的縮小操作也可按該辦法進行。



          效果如下圖所示

           


          原始圖片


           


          圖片放大為全屏幕大小




          圖片縮小為原來的1/4大小




          好了,我們來看代碼

          java 代碼


           


          1. import javax.microedition.lcdui.Graphics;  

          2. import javax.microedition.lcdui.Image;  

          3.   

          4. /** 

          5. * 圖像工具類 

          6. * @author Jagie 

          7. * 

          8. */  

          9.   

          10. public class ImageUtil {  

          11.   

          12. /** 

          13. * 圖像放縮方法 

          14. * @param srcImage 原始的Image對象 

          15. * @param newW 放縮后的Image的寬度 

          16. * @param newH 放縮后的Image的高度 

          17. * @return 放縮后的Image對象 

          18. */  

          19.   

          20. public static final Image scale (Image srcImage, int newW, int newH) {  

          21. int srcW = srcImage.getWidth();  

          22. int srcH = srcImage.getHeight();  

          23. //先做水平方向上的伸縮變換  

          24. Image tmp = Image.createImage(newW, srcH);  

          25. Graphics g = tmp.getGraphics();  

          26.   

          27. for (int x = 0; x < newW; x++) {  

          28. g.setClip(x, 01, srcH);  

          29. //按比例放縮  

          30. g.drawImage(srcImage,x-x*srcWnewW,0,Graphics.LEFT | Graphics.TOP);  

          31.   

          32. }  

          33.   

          34. //再做垂直方向上的伸縮變換  

          35. Image dst = Image.createImage(newW, newH);  

          36. g = dst.getGraphics();  

          37.   

          38. for (int y = 0; y < newH; y++) {  

          39. g.setClip(0, y, newW, 1);  

          40. //按比例放縮  

          41. g.drawImage(tmp,0,y-y*srcHnewH,Graphics.LEFT | Graphics.TOP);  

          42.   

          43. }  

          44.   

          45. return dst;  

          46. }  

          47.   

          48.   

          49. }  

          50.   

          51. 也許有同學會提出疑問,既然是按x,y方向按等比例放縮,那我寫成這樣豈不是代碼更簡潔:  

          52.   

          53. public static final Image scale2(Image srcImage, int newW, int newH) {  

          54. int srcW = srcImage.getWidth();  

          55. int srcH = srcImage.getHeight();  

          56.   

          57. Image dst=Image.createImage(newW,newH);  

          58. Graphics g=dst.getGraphics();  

          59. for (int x = 0; x < newW; x++) {  

          60. for (int y = 0; y < newH; y++) {  

          61. g.setClip(x, y, 11);  

          62. g.drawImage(srcImage, x-x*srcWnewW, y - y * srcH / newH, Graphics.LEFT  

          63. | Graphics.TOP);  

          64.   

          65. }  

          66.   

          67. }  

          68.   

          69. return dst;  

          70. }  







          這種做法效果上和前者無異,但是并不可取,只要算算它的時間復雜度就知道,基本上是前者的平方。在我的機器上,做一次全屏幕的放縮操作,前者耗時60ms,而后者耗時7150ms。







          其實上面的做法很簡單,以后有需求可以整理成一個控件,這樣就可以很方便的調用,與學習。

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(91) | 評論 (0)編輯 收藏

          設計可組裝的j2me UI(六) Dialog(對話框)

               摘要:       高級UI提供了一個Alert的控件可以有彈出對話框的效果。但是大家想不想自己實現一個呢。想不想知道sun是如何讓Alert工作的呢?好請看下文     設計思想是。建立一個 abstract   class Dialog extends Canvas。下面的事情就讓我們一步步花出來吧。&nbs...  閱讀全文

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(216) | 評論 (0)編輯 收藏

          切割圖片

                大家在設計游戲或者其他應用的時候,很多都要操作圖片。眾所周知。j2me程序不能太大,因為它有太多的限制。改怎么辦呢,我的應用要求大量的圖片。沒關系,圖片是死的,人是活的。我們始終都是有辦法搞定的。高手們自己寫個圖片壓縮的算法,我們這些水平一般的人只能踏實的做自己的事情了。

                1。通過工具壓縮圖片大小。比如把顏色植調小點,這樣不僅效果在手機上不會差很多,還可以大大的縮小圖片。

                2。把所有的圖片繪制成一張大圖片。然后通過程序來切割它,這樣在操作上面會方便很多。

                下面我們來看看代碼把

            

                

          java 代碼


           


          1. try { 


          2.            //創建源圖片


          3.             source = Image.createImage("/p.png");   

          4.         } catch (IOException e) {  

          5.             log.error(e, "讀取圖片文件錯誤");  

          6.             System.exit(0); // 退出程序  

          7. }  



          java 代碼


           


          1. /** 

          2.  * 載入圖片。切割圖片資源 

          3.  */  

          4. public static final void loadImages() { 


          5.     //切割圖片了。只要知道具體的位置,就什么都可以辦到

          6.     MY_BOOK = Image.createImage(source, 63120220);  

          7.     NET_BOOK = Image.createImage(source, 632120220);  

          8.     ABOUT = Image.createImage(source, 556120220);  

          9.     HELP = Image.createImage(source, 17931120220);  

          10.     EXIT =  Image.createImage(source, 1794120220);  

          11.     ARROW = Image.createImage(source, 178571590);  

          12. }  





          程序就這么簡單。詳細的例子可以看看我共享的關于電子閱讀的基本框架

          posted @ 2006-12-30 09:24 路是爬出來的 閱讀(153) | 評論 (0)編輯 收藏

          僅列出標題
          共5頁: 上一頁 1 2 3 4 5 下一頁 
          主站蜘蛛池模板: 长丰县| 全州县| 普格县| 藁城市| 宁晋县| 怀柔区| 辉县市| 司法| 南安市| 延津县| 岳阳市| 景谷| 兴隆县| 东宁县| 龙南县| 竹山县| 衡南县| 嘉兴市| 上饶市| 兖州市| 古丈县| 通化市| 高邑县| 会泽县| 罗源县| 宁波市| 香河县| 扶沟县| 崇礼县| 南乐县| 甘肃省| 康平县| 屯昌县| 昔阳县| 吉林市| 信阳市| 钟山县| 福泉市| 泸州市| 温宿县| 五寨县|