工作達人(Job Da Ren)
服務是我架站的宗旨,全球華人及男女青年未來的工作方向

  • Home
  • About achi
    • My Disclosure Policy
  • Archives
    • Link Exchange
  • 隱私權政策
  • stock photos
  • Contact
  • Top Posts
  • Poll
  • wp-buzz
    • ㄚ琪的Live PR
  • Advertise
Job Da Ren > CompScience > Programming > Languages > java > j2me

Archive for the ‘j2me’ Category

« Older Entries

 Powered by Max Banner Ads 

如何在手機裡安裝Java ME應用程式

2009-07-27,Last modified: 2010-06-02Please wait

 Powered by Max Banner Ads 

這一篇是我在How to install Java ME application in mobile phone的中文翻譯,網址在如何在手機裡安裝Java ME應用程式!
為了備份,並轉貼在此:

Contents

[hide]

  • 1 概論
  • 2 空中下載技術 (OTA)
  • 3 紅外線及藍芽
  • 4 用序列埠纜線安裝
  • 5 WAP訊息推送

概論

安裝J2ME應用程式到手機裡可以用下面幾個方式來做:

首先必必須轉換應用程式到你的手機裡,你可以從PC使用資料傳輸、紅外線或藍芽來轉換你的應用程式到手機,你可以不需要PC Suite來安裝MIDlets。

在S40系列的手機裡應用程式可以自動安裝,在S60系列手機上你需要打開(收件匣)的附有應用程式的信件然後手動安裝,但是如果你使用PC Suite來安裝MIDlet,在S60的手機上安裝程序會自動啟動,雖然你還是的要手動一步一步地安裝。

另一個轉換MIDlet到手機的方式就是將(JAR及/或JAD檔)存在網站伺服器上然後使用手機的瀏覽器將檔案下載下來(所以又叫做OTA下載),注意伺服器必須有正確的定義MIME型態如下:

JAR: application/java-archive
JAD: text/vnd.sun.j2me.app-descriptor

有四種方法可以佈署應用程式到手機裡

空中下載技術 (OTA)

使用OTA佈署方式,MIDlet(Java ME應用程式)安裝在Web伺服器上然後透過手機上Internet的微型瀏覽器下載到設備上,JAR檔及JAD檔是OTA安裝需要用到的。 這個程序是藉由瀏覽一個含有一個連結到MIDlet套件的網頁來啟動,按下連結,會讓Web伺服器傳送MIDlet套件的JAD檔到瀏覽器,在收到JAD 檔後,檔案會開啟然後他的內容會被佈署,JAD檔含有MIDlet套件的描述,包括大小、版本編號及誰提供的,然後有一個請求JAR檔的請求送出,最後 Web伺服器傳送JAR檔,一旦JAR檔傳送到設備,套件就會安裝然後個別的MIDlet會被選擇及執行。

紅外線及藍芽

紅外線(IR)或藍芽科技可以用來傳送MIDlet從PC到手機上

用序列埠纜線安裝

假如手機有序列埠纜線的port及PC的連線軟體,MIDlet可以透過序列埠纜線來安裝。

WAP訊息推送

我們可以用WAP推送訊息,下載的連結可以送到目標的手機號碼,使用者可以按下連結來下載應用程式。

WAP訊息推送是特別格式化過的可以顯示警告訊息給使用者的SMS簡訊,它會給使用者透過手機的WAP瀏覽器直接連到一個特定URL的選擇

Print Friendly

Posted in j2me, 翻譯 | No Comments »

使用MTJ建立第一支MIDlet

2009-08-07,Last modified: 2010-01-15Please wait

 Powered by Max Banner Ads 

這一篇是我在Creating your first MIDlet using EclipseME的中文翻譯及更新,網址在使用MTJ建立第一支MIDlet!
為了備份,並轉貼在此:

這些說明假定你已根據安裝S60的Java ME開發工具這篇文章安裝了Mobile Tools for JavaTM (MTJ,前身為EclipseME)。

Contents

[hide]

  • 1 建立新的專案
  • 2 建立新的MIDlet
  • 3 撰寫MIDlet程式碼
  • 4 偵錯MIDlet程式碼
  • 5 建立佈署的套件
  • 6 另見
  • 7 外部連結

建立新的專案

  1. 啟動Eclipse然後到工作台。(假如你不知道Eclipse概念像是”工作台”,現在是使用Help功能來學習基本概念最好的時機。)
  2. 選擇選單項目File | New | Project。
  3. 站開節點Java ME,然後選擇MIDlet Project,按下Next。
  4. 設定project name HelloWorld,你也可以將預設的工作區改成其他的位置,按下Next。
  5. 檢視”Configurations”看DefaultColorPhone是否選取,如果沒有則於active欄位處勾選,如果沒有選擇DefaultColorPhone這個選項,則按下Add按鈕,在SDK下拉選單選擇Sun Java(TM) Wireless Toolkit 2.5.2 for CLDC以及DefaultColorPhone,按下Finish。
  6. 一直按下一步到Java Settings這一頁,在Source標籤頁中,檢視Allow output folders for source folders複選按鈕,並接受預設的狀況。
  7. 按下完成。

Eclipse的 package explorer視圖應該會顯示一個新建的專案HelloWorld,這個專案包括資料夾src及res,函式庫J2ME library及Application DescriptorHelloWorld.jad。

建立新的MIDlet

  1. 從選單項目選擇File | New | Other。
  2. 展開節點Java ME然後選擇Java ME Midlet,按Next。
  3. 有一個標題Java ME Midlet的對話框出現。
    • Source folder設定項目應該已設為<your workspace location>/src。
    • Package的設定項目,設為com.example.helloworld。
    • Name的設定項目,設為HelloWorldMidlet。
    • 按下Finish。

現在你應該看見一個新增的檔案HelloWorldMidlet.java在Eclipse的編輯視窗中,並且包括一些骨架程式碼,Eclipse的package explorer視圖應該顯示它被建立在HelloWorld/src/com.example.helloworld下。

撰寫MIDlet程式碼

將HelloWorldMidlet.java的程式碼換成文章Hello World in Java ME中的程式碼。

偵錯MIDlet程式碼

  1. 在startApp方法的開始設定中斷點。
  2. 在package Explorer視圖裡,選取HelloWorldMidlet.java按右鍵,選擇Debug As,然後選擇Emulated Java ME Midlet。
  3. 一個對話視窗會顯示詢問你是否想要切換到Debug視景,按Yes。
  4. 手機模擬器視窗現在會顯示出來,Eclipse應該已經切換到Debug視景,然後在編輯視窗裡MIDlet的執行應該停在你設定的中斷點處。
  5. 恢復執行,模擬器的螢幕應該顯示”Hello Hello World!”

建立佈署的套件

  1. 在Package Explorer視圖裡,右鍵點選專案HelloWorld,然後選擇Mobile Tools for Java | Create package或 Mobile Tools for Java | Create Obfuscated Package。
  2. 一個目錄HelloWorld/deployed應該建立,包含檔案HelloWorld.jad跟HelloWorld.jar。

另見

  • 開始使用Java ME
  • 安裝S60的Java ME開發工具

外部連結

  • Eclipse documentation: Creating a new J2ME MIDlet Project
  • Eclipse documentation: Create a new Midlet
Print Friendly

Tags: eclipse
Posted in j2me, 翻譯 | No Comments »

開始使用Java ME

2009-08-03,Last modified: 2010-01-15Please wait

 Powered by Max Banner Ads 

這一篇是我在Getting started with Java ME的中文翻譯,網址在開始使用Java ME!
為了備份,並轉貼在此:

要使用你的第一個Java ME應用程式(MIDlet)在一台真正的機器上跑需要一些步驟,這個維基網頁是這些步驟的指南,因為他是針對第一次應用程式的開發,所以有些事情被簡化,更多詳細的資訊可以在別的地方找到。

Contents

[hide]

  • 1 Java ME是你需求的正確工具嗎?
  • 2 開發流程概述
  • 3 需要的硬體
  • 4 S60需要的軟體
  • 5 S40及S80系列的模擬器及SDK
  • 6 設計及編譯你的第一支MIDlet程式
  • 7 典型陷阱
    • 7.1 使用錯誤的Java編譯選項編譯Java ME程式
    • 7.2 用不正確的CLDC或MIDP版本編譯及封裝MIDlet

Java ME是你需求的正確工具嗎?

Java ME是桌上電腦標準Java(Java SE)的有限集合,它有些其他手機相關的API,有一些限制你需要記住:

  • MIDlets因為安全的因素再殺盒裡面執行。(當使用某些功能時需要確認,像連網或是發送簡訊。)
  • 沒有JNI (Java原生介面)所以你不能在手機上展開Java Me環境的能力。
  • 沒有Swing或AWT類別,MIDlets使用自己的(最簡單的)UI類別。
  • Java ME環境的能力差異很大,因為手機有不同的API選項可以實做(例如存取檔案、存取電話簿、影音錄製、三維圖形等等。)

因此首先,開始之前別的,考慮看看Java ME 是否是你的正確選擇,或是你應該使用Flash Lite開發應用程式(可以在40及S60系列手機上執行),或者你應用Python設計程式(只能在S60用)或是原生的Symbian C++(只能在S60的手機上用),(然而,SymbianOS上原生的C++開發非常的乏味而且容易出錯,所以為了生產力的原因,Java ME可能是較好的選擇。)

假如Java ME似乎是一條要走的路,你可以在這個維基或諾基亞論壇的Java討論區裡找到很多好的資訊,另外在諾基亞的網站裡也有文件可以使用,就跟在昇陽的網站及IBM DeveloperWorks網站一樣。

開發流程概述

首先記住你必須在你開發的電腦上設計程式、編譯及佈署MIDlet,你不能在自己的手機上建立MIDlet(尚未有這個功能)。

要寫MIDlet程式碼,可以使用文字編輯器或是你喜歡的IDE (整合式開發環境),(請見下面諾基亞支援的IDE,)然後使用Java SE SDK (JDK)所附的javac編譯器編譯,這時候你甚至不需擔心你的程式,你的程式碼在這個階段會先被預審核。

在能夠安裝MIDlet到一台真正的機器之前,你仍需要封裝MIDlet類別及資源成JAR (Java的檔案文件)然後產生一個JAD (Java應用描述文件)檔,JAR檔包含所有要執行這個應用程式的程式碼,JAD檔式一個文字檔包含了關於MIDlet的描述資訊(大小、所需的 API、MIDlet名稱、廠商名稱及可簽名訊息),這可以讓手機(及使用者)可以使用來決定是否要下載這個MIDlet,你只需要安裝JAR檔到手機上 就能夠執行MIDlet;然而,強烈建議使用這兩個檔案來安裝應用程式。

在這個階段,你可以在你的開發工作站使用手機的模擬器來測試MIDlet,然後進可能的更改、然後重新編譯及封裝,當你滿意這個結果,你可以移轉產生的JAR及JAD檔到真正的手機上 、安裝應用程式然後測試。(你應該在發行之前在真正的機器上測試MIDlet。)

你也可以使用某些線上的資源在真正的機器上來測試你的應用程式,像是遠端設備存取(RDA)或是Device Anywhere。

你也應該下載其他廠商的模擬器(摩托羅拉、索尼愛立信、三星等等),然後使用它們來測試你的應用程式。

需要的硬體

因為諾基亞開發工具的需求,你開發的電腦必須是一台執行Microsoft Windows 2000 (SP 4)或Microsoft Windows XP (SP 2)的PC。

S60需要的軟體

關於S60平台的Java ME開發,需要下列的工具:

  • Java SE (標準版本) Development Kit (JDK)
  • 無線開發工具包
  • Nokia SymbianOS/S60 SDK for Java
  • 一個IDE加上Java ME的開發(諾基亞支援Eclipse + EclipseME及NetBeans + Mobility Pack)
  • 說明文件

安裝這些工具的詳細資料,見安裝S60的Java ME開發工具。

S40及S80系列的模擬器及SDK

  • Java Tools for Nokia Series 40
  • Java Tools for Nokia Series 80

在S60開發的例子裡,使用執行Windows 2000或Windows XP的PC,及Eclipse或NetBeans的IDE,以及相關的Java ME開發外掛(EclipseME或Mobility Pack),見安裝S60的Java ME開發工具下載的位置。

設計及編譯你的第一支MIDlet程式

見Hello World in Java ME及Creating your first MIDlet using EclipseME。

典型陷阱

使用錯誤的Java編譯選項編譯Java ME程式

正確的編譯版本是1.3或1.4,使用5.0或6.0版本來邊議會不能安裝MIDlet。

用不正確的CLDC或MIDP版本編譯及封裝MIDlet

這特別在使用昇陽的無線通訊包時是真的,它預設是用MIDP 2.1建置MIDlet,然而目前大部分的手機只能用MIDP 2.0,(注意,你可以安裝手機可以支援的較舊版的CLDC/MIDP,但是你不能用較新的CLDC/MIDP版本來安裝MIDlet到手機上,檢查FN device specification pages上支援的CLDC及MIDP版本。)

Print Friendly

Tags: eclipse
Posted in j2me, 翻譯 | No Comments »

安裝S60的Java ME開發工具

2009-07-22,Last modified: 2010-01-15Please wait

這一篇是我在Installing Java ME development tools for S60的中文翻譯,網址在安裝S60的Java ME開發工具!
為了備份,並轉貼在此:

這裡所列的工具組合(全都免費)已經過作者測試來使用Java ME來開發S60的應用程式,對於未來這篇文章的編輯者:請確認你的編輯已經過測試以避免開發者有挫折發生。

Contents

[hide]

  • 1 下載工具
  • 2 設定工具
    • 2.1 Eclipse的工作目錄
    • 2.2 設定 MTJ
    • 2.3 設定Eclipse的Java選項
    • 2.4 設定MTJ
  • 3 另見

下載工具

工具 建議版本 下載 注意
Java SE (標準版本) 開發工具(JDK) JDK 6 Update 14 (注意lJava* 6.0跟J2* 1.6.0一樣) 這裡 (檢查最新版本) 需要下列的工具,在下載的時候選擇你的作業平台然後點選該檔案名稱,SDK安裝的目錄是C:\Program Files\Java\jdk1.6.0_14,而JRE的安裝部份是C:\Program Files\Java\jre1.6.0_14,接受預設的安裝。
Sun Java Wireless Toolkit for CLDC 2.5.2 這裡 (搜尋”Sun Java Wireless Toolkit 2.5.2 for CLDC”) 在安裝”Java (TM) Virtual Machine Location”的階段裡,你機器上的最新JDK版本會自動偵測,假如有比JDK 6 Update 14還新,那麼就瀏覽目錄C:\Program Files\Java\jdk1.6.0_14,這個工具預設的安裝目錄是C:\WTK2.5.2。注意:這個無線通訊工具包已經整合到Java ME SDK 3.0中,當你被歡迎使用這個無線通訊工具包時,昇陽開發人員網路強烈建議這個較新的功能豐富的Java ME SDK 3.0 這裡。
Jave的Nokia SymbianOS/S60 SDK S60 5th Edition SDK 這裡 你必須登入到諾基亞論壇才能下載檔案,(新增諾基亞論壇帳號很快而且免費),解壓縮下載檔案,S60_5th_Edition_SDK_v1_0_en.zip,進到目錄執行解壓縮的setup.exe安裝程式,預設安裝目錄是C:\S60\devices,有些功能需要Pearl才能安裝。
Eclipse整合式開發工具 3.5 這裡 解壓縮下載檔案,eclipse-SDK-3.5-win32.zip,到C:\Program Files\eclipse,或假如你喜歡的話可以到另一個目錄,(作者比較喜歡家個版本號碼到安裝的C:\Program Files\eclipse-3.5目錄裡,)要執行整合式開發工具,在主目錄裡eclipse.exe執行。
Eclipse的MTJ外掛程式 1.0 你可以透過eclipse的Help->Install New Softwares …->Add->http://download.eclipse.org/dsdp/mtj/updates/1.0/stable/來下載 這是移轉自EclipseME最新的版本,可以在Eclipse v3.5執行,另有相關的操作如下。

注意除了Eclipse之外,諾基亞也支援NetBeans整合式開發工具(加上它的Mobility Pack)來開發S60/Java ME,見這裡有更多詳細的資料。

設定工具

下載上述所有的工具之後,執行下面的操作。

Eclipse的工作目錄

  1. 新增一個目錄作為Eclipse的工作目錄,像是C:\some\path\eclipse_workspace\,(你可以忽略這個然後接受下個步驟的預設工作目錄。)
  2. 啟動Eclipse,當被詢問使用的工作目錄時,給定你所建立的目錄,或是接受預設的,(工作目錄可以稍後在選單項目File | Switch Workspace調整,)Eclipse會重新啟動。

設定 MTJ

  1. 選擇選單項目Window | Preferences。
  2. 展開節點J2ME然後選擇Device Management。
  3. 在對話框的設定部份,按下Import。
  4. 在新的對話框裡,瀏覽目錄C:\S60\devices\Nokia_N97_SDK_v0.5,點選Refresh。
  5. 確認S60Emulator及S60Device設備的核取方塊已經選取,按Finish。
  6. 再按Import。
  7. 在新的對話框裡,瀏覽目錄C:\WTK2.5.2 (這是你安裝無線通訊工具包的地方),按下Refresh。
  8. 確認所有設備的核取方塊已被選取,按下Finish。
  9. 回到主對話框,選擇DefaultColorPhone作為預設的設備。(選擇S60Emulator會在跑MIDlet的時候有錯誤。)
  10. 回到主對話框,按下OK。

設定Eclipse的Java選項

  1. 在Eclipse裡,點選選單項目Window | Preferences。
  2. 展開節點Java | Build Path。
  3. 在’Source and output folder這個項目裡,點選Folders按鈕,然後保持預設值(src及bin)。
  4. 展開節點Java | Debug。
  5. 取消選取Suspend execution on uncaught exceptions。
  6. 取消選取Suspend execution on compilation errors。
  7. 設定Debugger timeout (ms)為15000。
  8. 按下OK。

設定MTJ

  1. 在安裝的Eclipse的configuration目錄下,開啟config.ini,新增 osgi.framework.extensions=org.eclipse.mtj.core.hooks,如果有其他類似 osgi.framework.extensions這樣的字串,則修改其設定值。

另見

  • Getting started with Java ME
  • Creating your first MIDlet using EclipseME
Print Friendly

Tags: eclipse
Posted in j2me, 翻譯 | No Comments »

觸控設備的Qwerty鍵盤畫布

2009-08-14,Last modified: 2009-11-04Please wait

這一篇是我在A Canvas Qwerty Keyboard For Touch Devices的中文翻譯,網址在觸控設備的Qwerty鍵盤畫布!
為了備份,並轉貼在此:

使用低階UI的鍵盤問題

虛擬鍵盤背後的意圖就是再沒有實體鍵盤的觸控設備上像是Nokia 5800 XpressMusic及Nokia 5530 XpressMusic手機在MIDlet(內建低階UI類別)裡有一個機制來輸入任何種類的文字。

當使用有實體鍵盤的設備來建立低階(Canvas或GameCanvas)應用程式時,能夠從所按的鍵來取得事件然後據此行動,每個鍵的ascii碼會傳到Canvas類別的keyPressed(int)方法裡。

文數鍵盤: 只有一個ascii碼會傳到keyPressed方法,這是因為每個鍵參考幾個字元的話就不能去確切知道使用者想要輸入什麼字元,通常ascii碼傳到這個方法裡的會是關於數值的。

Qwerty鍵盤:假如鍵盤是qwerty,就能夠獲取所有字元集的ascii碼,當像shift或數值模式被按下時設備就會負責改變字元集,所以正確的ascii碼可以傳到這個方法裡。

根據上述,在不同的諾基亞手機裡輸入文字可以用qwerty鍵盤來解決,而且在文數鍵盤及非實體鍵盤的手機裡可以存在。

有一種方法來解決的基本問題,它包含了結合低階及高階的顯示元件,當一個低階應用程式的指定區域建立,那麼這個想法就是援引一個TextBox元件、擷取使用者新增的文字然後再一次在低階元件裡顯示。

這個方法有下面的缺點。

  • 高階元件會佔用整個螢幕。
  • TextBox元件的外觀感覺是根據原生的外觀感覺而不是使用應用程式的外觀感覺而這可能會干擾使用者經驗,舉一個例應用程式的外觀感覺整個是藍的而原生元件是黑的。

在最新的S60 5th版本裡有一個附加元件不會佔用整個螢幕,它只需要在JAD檔裡增加一個屬性,你可以看看範例如何使用這個機制在下面的連結裡。 How to use pop-up TextBox in Java ME

總體設計考慮

可繪區域

Image:vkimage1.jpg
在S60 5th版本裡的Canvas的可繪區域可以用屬性Nokia-MIDlet-On-Screen-Keypad來改變,不同的可繪區域大小顯示在下表裡。
Nokia-MIDlet-On-Screen-Keypad

Value Portrait Landscape
*Default (gameactions & navigation keys) 360×360 320×360
navigationkeys 360×384 372×360
no 360×640 640×360
  • Default 意指在JAD或manifest檔裡不用寫出這個屬性,更多資訊見在S60第五版機器的MIDlet裡使用螢幕鍵盤

方向

有一個方法可以強迫鍵盤保持橫向,可以使用下面的屬性這樣作:

Nokia-MIDlet-App-Orientation

可能值:portrait 或 landscape

很重要的備註一下是在早期5800的軟體版本裡這個屬性沒有作用,這個問題已在早期的韌體版本中更正。 KIJ001169 – Fixed landscape mode cannot be set by using Java ME in Nokia 5800 XpressMusic
理想情況下在JAD或manifest檔裡使用這兩個屬性就可以有一個全螢幕的虛擬鍵盤(640×360):

  • Nokia-MIDlet-On-Screen-Keypad: no
  • Nokia-MIDlet-App-Orientation: landscape

鍵盤組成

Image:vkimage2.jpg

TOUCHKEYBOARD

這個類別用在觸控設備的虛擬鍵盤,鍵盤由TextFieldArea用來顯示輸入的文字,及一系列可用字元的按鈕來允許修改虛擬鍵的行為等組成。

所有按鈕繼承自宣告基本方法的Button類別,虛擬鍵盤包含三種不同的按鈕。

  1. MatrixButton:是顯示字元鍵盤的一部份,每個鍵有一個預覽然後當按鈕下時採取一個行動。
  2. PushButton:是單獨的按鈕,這些按鈕按下時不會顯示這個鍵的預覽,例如Ok、 backspace、shift,按鈕釋放時也會有行動會採取。
  3. ModeButton:是改變鍵盤一些行為的按鈕,像是字元集或是啟用指針,當按鈕按下時採取行動。

改變字元區域的外觀感覺

MatrixButton也稱為字元區域是由TiledLayer組成,TiledLayer包含三種不同的拼布,第一塊用在鍵盤的閒置狀態,第二 塊用在鍵盤被選擇的狀態而第三塊則用在鍵盤按下時在右邊預覽,在MatrixButton裡的字元集會直接繪在GameCanvas的Graphics 上,他們的Font及Color可以用方法setCharactersAreaFont(Font)、setCharactersAreaFontColor(int) 和 setCharactersAreaPreviewFontColor(int)來改變,這允許字元區域來調整不同的尺寸來跟應用程式有相同的外觀感覺。

改變TextFieldArea的外觀感覺

要根據應用程式所用的外觀感覺來改變TextFieldArea的外觀感覺,可以使用下面的方法setTextFieldFont(Font)、setTextFieldBkgColor(int)、setTextFieldBorderColor(int)、setCursorColor(int)及 setTextFieldFontColor(int) 。

改變其餘按鈕的外觀感覺

虛擬鍵盤其餘的按鈕是PushButton及ModeButton,這些按鈕基本上是由Sprite物件組成,要改變另一個按鈕的外觀感覺需要修改 resources資料夾裡相關的圖檔,每個圖檔會參考一個私有常數,所以假如圖檔名稱改變也要確認這個私有常數有變更是很重要的。

限制字元的數目

要限制鍵盤裡輸入的字元數目可以使用函式 setMaxSize(int)

TEXTFIELDAREA

這個元件能夠保持並顯示文字,新增時指定一個尺寸並在元件整個生命週期裡都保留著,TextFieldArea類似S60原生文字輸入區域的行為這個行為可以在寫入一個文字訊息時見到。

改變外觀感覺

根據應用程式所使用的外觀感覺來改變是可能的。

要這樣做使用下面的方法setTextFieldFont(Font)、setTextFieldBkgColor(int)、setTextFieldBorderColor(int)、setCursorColor(int)、setTextFieldFontColor(int)

安排文字

這個部份負責擁有的文字安排,要辨別一個字可以藉著字元後的空白字原來做,假如這個字太長不能適合這行的其餘空間,它會被推到下一行,假如單獨的一 個字還是大於這個TextFieldArea的水平空間,這個字就會被分成幾段來適合這個部份的寬度,每次一個新的字元新增或刪除整個textArea必 須重組,這是因為文字可以在任何地方輸入的關係。

關於游標

游標標記新的字元可以新增的地方,當新增發生時,游標移到下個位置,游標的顏色可以使用方法setCursorColor(int)來修改或使用setCursorVisible(boolean)來隱藏,游標可以使用方法moveCursorLeft()或moveCursorRight()移 到左邊或右邊,當游標到最後一行的最後一個位置時,輸入的下一個字元會讓這部份向下移一行所以游標始終可以見到並且在最後一行,同樣地假如游標移到這部份 的右上方並且其上還隱藏有幾行文字,那麼他會使得這部份向上移一行所以游標還是保持可見,在這幾個字裡游標控制TextFieldArea顯示的己行文 字。

繪製TextFieldArea

這個部份需要一個Graphics物件來繪製,要這樣做需要一個明確的呼叫方法paint(Graphics, int, int)來做,最後兩個參數表示這部份將繪製的Graphics的xy位置,這機制的最大好處是這部份的同一實體可以不同的Graphics及不同的位置來繪製,這個部份會將文字分成幾行,只有在螢幕的幾行文字會被繪製,其餘的會被忽略,游標所在的那一行始終保持可見。

新增新的字元及取得文字

TextFieldArea最大字元數可以使用方法setMaxSize(int)來確定,假如沒有指定這個值,就不會限制輸入的字元數,要在目前游標位置新增一個新的字元可以使用方法insertCharacterInCursorPosition(char)來做,在游標位置刪除一個字元可以使用方法deleteLastCharBeforeCursor()來做,要在任何時間設定文字可以使用方法 setText(String),這個方法將置換原有的文字然後將游標置於該行的結尾,要取得TextFieldArea現有的文字使用getText()方法。 要充分利用鍵盤在設備裡的文字安排功能,這個部份提供insertAscii(int)方 法,當Canvas或GameCanvas使用時,keyPressed方法提供按鈕按下的ascii碼,對於正常鍵盤手機來說這是按下數字的 ascii,對qwerty設備來說它會是按下鍵的值,假如shift或數值鍵被按下該設備會自動改變字元集,所以所收到的ascii是不同的並且對應於 所要的鍵,倒退鍵字元也會以ascii碼來收取,所以沒有必要用明確的方式來呼叫刪除的函式。

下載原始碼及執行檔

在這裡你可以找到完整的NetBeans專案包括原始碼及執行檔。 Image:TouchKeyboard.zip

下載JAVADOCS

這裡你可以找到API參考。 Image:Javadocs.zip

下載範例

下面你將發現使用這個元件的範例,你可以下載完整的範例。 Image:KeyBoardExample.zip

使用元件

下面的範例顯示如何使用TouchKeyboard及TextFieldArea類別,這個範例包含有兩個TextFieldAreas的一個主要 的canvas,負責檢測屬於這個應用程式的使用者點到那個區域,一旦應用程式偵測到TextFieldArea有被接觸它就會顯示虛擬鍵盤,當使用者在 虛擬鍵盤選擇OK按鈕時,輸入的文字會儲在一個變數裡,這個變數是根據資料(name或address)的然後這個值會傳到正確的 TextFieldArea,下一次鍵盤援引時,它會提供TextFieldArea所存的文字。

記住TextFieldArea會調整它所持有的文字成自己定義的大小,那就是為什麼在TouchKeyboard裡的文字跟這兩個TextFieldAreas裡的文字可能會不同。

下面這張圖片顯示兩張應用程式的螢幕快照

Image:vkimage3.jpg

Image:vkimage4.jpg

JAD & Manifest屬性

Nokia-MIDlet-On-Screen-Keypad: no
Nokia-MIDlet-App-Orientation: landscape

BigKeyboard.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import keyboard.TextFieldArea;
import keyboard.TouchKeyboard;
import keyboard.VirtualKeyboardListener;

public class BigKeyboard extends MIDlet
        implements VirtualKeyboardListener {

    public static BigKeyboard instance;     //static instance for the MIDlet

    private TouchKeyboard tkb;              //Virtual keyboard

    private Display display;
    private CanvasScreen canvas;            //Main application canvas

    int nameTransId;                        //transaction id to identify name

    int addressTransId;                     //transaction id to identify address

    public BigKeyboard() {
        instance = this;
        canvas = new CanvasScreen();
        display = Display.getDisplay(this);
    }

    public void startApp() {
        showCanvas();
    }

    /**
     * Shows the main application Canvas
     */
    public void showCanvas() {
        display.setCurrent(canvas);
    }

    /**
     * Shows the virtual keyboard in order to retrieve the name.
     * The name will be limited to 20 characters.
     * @param name
     */
    public void getName(String name) {
        if (tkb == null) {
            createKeyboard();            //create keyboard if it does not exists
        }
        //when keyboard is reseted, it returns a transactionId
        nameTransId = tkb.resetKeyBoard();
        tkb.setMaxSize(20);
        tkb.setText(name);
        display.setCurrent(tkb);
    }

    /**
     * Shows the virtual keyboard in order to retrieve the name.
     * The name will be limited to 80 characters.
     * @param address
     */
    public void getAddress(String address) {
        if (tkb == null) {              //create keyboard if it does not exists
            createKeyboard();
        }
        //when keyboard is reseted, it returns a transactionId
        addressTransId = tkb.resetKeyBoard();
        tkb.setMaxSize(80);
        tkb.setText(address);
        display.setCurrent(tkb);
    }

    /**
     * Creates a new instance of the keyboard and sets it with the right
     * customization parameters
     */
    private void createKeyboard() {
        tkb = new TouchKeyboard(TouchKeyboard.KEYBOARD_BIG, 0, 0, false);
        tkb.setTextFieldBkgColor(0xE0DBCA);
        tkb.setTextFieldBorderColor(0x040477);
        tkb.setTextFieldFontColor(0x0033CC);
        tkb.setBackgroundColor(0x44A51C);
        tkb.togglePointer();
        tkb.setVirtualKeyboardListener(this);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    /**
     * Method of the interface VirtualKeyboardListener.
     * This method is invoked when the OK button is pressed at the moment
     * the keyboard is displayed on the screen.
     * @param transactionId
     * @param text
     */
    public void okPressed(int transactionId, String text) {
        //use the transactionId to identify the purpose of the call
        if (transactionId == nameTransId) {
            canvas.setName(text);
        } else if (transactionId == addressTransId) {
            canvas.setAddress(text);
        }
        showCanvas();
    }
}

CanvasScreen.java

class CanvasScreen extends Canvas {

    /**
     * TextFieldArea containing the data of the name.  This textfield is only
     * to show information and so cursor should not be visible.
     */
    private TextFieldArea tfName;
    /**
     * TextFieldArea containing the data of the address. This textfield is only
     * to show information and so cursor should not be visible.
     */
    private TextFieldArea tfAddress;

    public CanvasScreen() {
        tfName = new TextFieldArea(200, 40);
        tfName.setCursorVisible(false);
        tfName.setTextFieldBorderColor(0xE024C1C);
        tfName.setTextFieldBkgColor(0xffffff);
        tfName.setTextFieldFontColor(0x0033CC);

        tfAddress = new TextFieldArea(200, 80);
        tfAddress.setCursorVisible(false);
        tfAddress.setTextFieldBorderColor(0xE024C1C);
        tfAddress.setTextFieldBkgColor(0xffffff);
        tfAddress.setTextFieldFontColor(0x0033CC);
    }

    /**
     * paints two rectangles in the screen
     * @param g
     */
    protected void paint(Graphics g) {
        g.setColor(68, 165, 28);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(255, 255, 255);
        g.drawString("Name (max 20 chars):", 10, 10, 0);
        tfName.paint(g, 10, 40);
        g.setColor(255, 255, 255);
        g.drawString("Address (max 80 chars):", 10, 100, 0);
        tfAddress.paint(g, 10, 140);
    }

    /**
     * sets the text of the TextFieldArea destined to name
     * @param name
     */
    public void setName(String name) {
        tfName.setText(name);
    }

    /**
     * sets the text of the TextFieldArea destined to address
     * @param address
     */
    public void setAddress(String address) {
        tfAddress.setText(address);
    }

    /**
     * Detects if user points the first or the second textFieldArea in the
     * touch device
     * @param x
     * @param y
     */
    protected void pointerPressed(int x, int y) {
        if (x > 10 && x < 210) {
            if ((y > 40) && (y < 80)) {       //Pointer hits the first textfield

                BigKeyboard.instance.getName(tfName.getText());
            } else if ((y > 140) && (y < 220)) {  //pointer hits the second textfield

                BigKeyboard.instance.getAddress(tfAddress.getText());
            }
        }
    }
}
Print Friendly

Tags: Java ME, on-screen keypad, Qwerty, 觸控設備
Posted in j2me, 翻譯 | No Comments »

Java ME Canvas基礎應用程式的設計樣式

2009-09-16,Last modified: 2009-09-16Please wait

這一篇是我在Design Pattern for Java ME Canvas based applications的中文翻譯,總共翻譯了15天,中間雖然夾雜著更改工作達人的佈景,不過仍算是久的了,網址在Java ME Canvas基礎應用程式的設計樣式!
為了備份,並轉貼在此:

繼續閱讀 »

Print Friendly

Posted in j2me, 翻譯 | No Comments »

« Older Entries
  • 1
  • 2
  • 3
  • ...
  • 5
  • 下一頁>

廠商贊助

贊助廠商連結請點我

最新照片

P3080170 IMAGE_950 DSC_6301 P1151495 P1121445 P4121410 P3070121 DSC_6158 cats
觀看更多的相片 >

熱門文章

  • GTK+ 2.0 教學 - 13,446 views
  • jQuery UI入門 - 7,623 views
  • 介紹NetBeans下的Android開發 - 6,967 views
  • 正確使用java array - 5,898 views
  • eclipse 3.4.1 中文 好好玩 - 5,125 views
  • 程式語言教學 – C、C++、OpenGL、STL - 4,233 views
  • GTK+ 2.0 教學-從這裡開始 - 3,648 views
  • jQuery UI 的 Demos展示及說明文件 - 3,562 views
  • Python 圖形使用者介面程式設計 - 2,813 views
  • 如何在手機裡安裝Java ME應用程式 - 2,603 views
  • Microsoft Visual C# 2010 Express更新 - 2,532 views
  • sudo apt-get install sun-java5-jdk - 2,332 views

隨便看看

  • Nokia論壇使用入門
  • 如何在手機裡安裝Java ME應用程式
  • 開始使用Java ME
  • S60的Java運行名稱及版本
  • Java移植
  • Java ME的Hello World
  • Java ME Location API(中文)
  • 如何在手機應用程式中使用Google地圖資料
  • 在Java ME中取得Cell ID
  • 藍芽API

懶得上網看文章!

就來訂閱我的電子報吧!

輸入你的電子郵件地址:

發送者為 FeedBurner

近期文章

  • 感興趣的xampp-win32-1.7.7
  • 與其給我邀請送禮物,倒不如幫工作達人按讚
  • 【夏日保養】小心辦公室冷氣,讓雙手提早變老!
  • 成人紙尿褲價格戰 苦了父母
  • Smart Life創意無痕壁貼
  • 不用出國的專業全美語兒童營隊
  • 試用BUGSLOCK純天然香茅防蚊手環(防蚊效果一級棒)
  • 多功能的除污達人
  • 五月連結Fun Taiwan送【DIANA】愛媽咪施華洛彩鑽項鍊
  • 網購熱銷缺貨!titan抗菌活力襪,抑菌除臭、護腳2合1

鳥鳴啾啾

    Follow Me on Twitter

    與我交誼!做我的粉絲!

    • technorati
    • Twitter

    其它

    • 登入
    • 文章 RSS 訂閱
    • 迴響 RSS 訂閱
    • WordPress.org

    快上www.blognews.com.tw,就有機會天天免費吃大餐!

    我的書摘

    RSS 科技新聞 – 頭條新聞 – Yahoo!奇摩新聞

    • 摩托行動侵權 部分手機遭禁 2012/05/19
    • 臉書掛牌上市 電腦出包 2012/05/19
    • 揭祕深海不明物體 專家:罕見水母! 2012/05/19
    • 大馬發明展 台灣學子溫馨奪金 2012/05/19
    • 亞洲市場成長趨緩 臉書新挑戰 2012/05/18
    • 蘋果亞馬遜相爭 面板雙虎得利 2012/05/18
    • 擁近10億用戶個資 將是獲利關鍵 2012/05/18
    • 小行星撞地球 中日菲會重創 2012/05/18
    • 小行星若撞地球 大陸先遭殃 2012/05/18
    • 英「條碼」小鎮 維基百科導遊 2012/05/18
    • 臉書濫用個資 人權組織要告 2012/05/18
    • 美報告:陸藉西方科技壯大軍力 2012/05/18
    • 點閱率低 臉書廣告效果惹議 2012/05/18
    • 英小鎮掃條碼 維基百科當導遊 2012/05/18
    • 玻璃構成的一天 影片解密未來世界 2012/05/18

    Blogroll

    • 628之巨蟹座的水世界
    • Blog語法研究室
    • Chip123創新論壇
    • Chungyuchen's Blog
    • Daphne's Fresh Look
    • Frank的雜記
    • Fun Taiwan
    • GOWEIS的好康分享記事簿
    • L K K 的心聲
    • LuckyDog 抽獎達人
    • Office 達人空間(章美蘭)
    • Potato的探索樂園
    • QK3000小遊戲
    • Russian Brides
    • Web Game @Live
    • yal's blog
    • 《心靈翅膀》發現不同的聲音
    • 『PDF』點滴夯發現
    • ㄚ晟的IT筆記
    • 企鵝碎碎唸
    • 傑尼斯部落
    • 免費訊息軟體下載
    • 免費軟體下載
    • 凱特打結該該叫
    • 台中蔣小姐
    • 台灣天氣網
    • 台灣排行榜 Rank.tw
    • 台灣部落格網站目錄
    • 嗡財財嚕嚕唆哈
    • 大紀元賀卡城
    • 好朋友二手家具
    • 小遊戲388
    • 小遊戲天堂
    • 小邱邱的測量放樣工程
    • 拆組達人
    • 敗家誌°
    • 時間不等於金錢
    • 月光下的嘆息!
    • 梅森手扎
    • 淘淘寶小遊戲天堂區
    • 玩物尚誌
    • 生活工場家
    • 白文MIMI與小鸚KIKI的生活記事
    • 紅色死神
    • 綠色工廠 Easylife Blog
    • 網路聯盟行銷中心
    • 美食美景紐西蘭美女的家
    • 蓉兒ㄉ天空
    • 遊戲世界
    • 遊戲阿布
    • 遨遊天地任我行
    • 野兔村
    • 阿文兄A日誌
    第五屆部落客百傑 第五屆部落客百傑 第五屆部落客百傑



    GetRank - Webmaster and Seo Tools
  • 分類
    • Android
    • ASP
    • BU幣任務區
    • C#
    • CentOS
    • CGI
    • CompScience
    • C_and_CPP
    • Database
    • DB2
    • debian
    • Featured
    • In Search of Stupidity
    • Information Architecture for the World Wide Web
    • j2me
    • java
    • JavaScript
    • JavaScript權威指南:ECMAScript5 + HTML5 DOM + HTML5 BOM 範例精粹
    • Languages
    • lds
    • Linux
    • LinuxDev
    • MSSQL
    • MySQL
    • NetSecurity
    • Office
    • Oracle
    • Palm
    • Peopleware: Productive Projects and Teams
    • perl
    • php應用
    • PostgreSQL
    • Python
    • Quality is Still Free
    • ruby
    • Solaris 系統
    • Sponsored Reviews
    • Symbian
    • System
    • THE MYTHICAL MAN-MONTH
    • The Peter Principle
    • TinyERP
    • ubuntu
    • Uncategorized
    • VBA
    • VoIP
    • Web Blog
    • weberp
    • Windows
    • windows mobile
    • Wordpress
    • xml
    • ㄚ琪走透透
    • 中壢社大河川踏查社
    • 人才庫
    • 企業ERP
    • 免費好康
    • 公司簡介
    • 口碑貼文
    • 商品推銷
    • 就業資源
    • 工作大未來
    • 工作訓練
    • 廠商簡介
    • 我攝過的教堂
    • 我的論文
    • 掌握Google關鍵字:SEO搜尋秘技全攻略
    • 數位拍古蹟
    • 文章導讀
    • 求才訊息
    • 生活與社會
    • 發燒鑑貨文
    • 直到路的盡頭
    • 神社
    • 科技通訊
    • 笑話
    • 約耳趣談軟體
    • 組合語言
    • 網站報報
    • 網站評論
    • 網路賺錢
    • 美味食記
    • 翻譯
    • 職業達人
    • 自然與科學
    • 藝術與表演
    • 觀察力培養
    • 設計模式之禪
    • 貼貼樂
    • 資料處理
    • 軟體報報
    • 閒聊
  • 最新的回應

    • 小倆口東京自由行-Day 2一日乘車券 | 工作達人(Job Da Ren) 在 小倆口東京自由行-Day 2明治神宮
    • Washer Parts - Our site provides essential information on ge appliance parts - Ge Appliance Parts 在 Whirlpool Appliance Parts
    • ㄚ琪 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • MESON 在 四月連結Fun Taiwan送好市特超大附門掛衣架組
    • GP 超霸充電池高電力鎳氫(NiMH)電池第十五次使用 | 工作達人(Job Da Ren) 在 GP 超霸充電池高電力鎳氫(NiMH)電池試用
    • ㄚ琪 在 webERP : WebERP 4.03.5 推出

    請幫工作達人按讚

    • Copyright c 2005 - 2009 工作達人(Job Da Ren) and is proudly powered by WordPress
    • Entries (RSS)
    • Comments (RSS)
    • Home
    • About achi
    • Archives
    • 隱私權政策
    • stock photos
    • Contact
    • Top Posts
    • Poll
    • wp-buzz
    • Advertise
    ss_blog_claim=fec8047405cd9a7a8d8d623b47b39edf
    Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣
    This work by ㄚ琪 is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 台灣.

    无觅相关文章插件,快速提升流量