J2ME學習筆記(六)

來源:互聯網
上載者:User
筆記 要處理低級事務或者進行螢幕畫圖,那麼我們必須要使用Canvas。一般要編寫手機遊戲也是需要Canvas來

製作,它提供了處理鍵盤,手寫筆以及遊戲的圖形處理功能。
因為Canvas由Displayable繼承來的,所以具有addCommadn()方法,也可一和Commadn其他屬性配合組

成進階交易處理。Screen於Canvas有相同的特性,但是Screen允許開發人員自訂監聽器,但是Canvas不

允許。
低級交易處理一般分兩種,一種來此鍵盤,一種就是手寫筆。
首先我們來看看處理鍵盤的代碼
/**
* @author You Li
*
* CopyRight (C) 2005
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class LLEventMIDlet extends MIDlet {

/**
*
*/
private Display display;
public LLEventMIDlet() {
display = Display.getDisplay(this);
}

/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException {
// TODO 自動產生方法存根
MyCanvas mc = new MyCanvas() ;
display.setCurrent(mc) ;
}

/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void pauseApp(){
// TODO 自動產生方法存根
}

/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自動產生方法存根
}
class MyCanvas extends Canvas{
String action = "" ;
public void paint(Graphics g){
// 清除螢幕
g.setColor(255,255,255) ;
g.fillRect(0,0,getWidth(),getHeight()) ;
g.setColor(0,0,0) ;
// 檢查是否支援長按鍵行為
if(hasRepeatEvents()){
g.drawString("Repeat",10,10,0) ;
}else{
g.drawString("NonRepeat",10,10,0) ;
}
g.drawString(action,10,20,0) ;
}
protected void keyPressed(int keyCode){
action = "KP:" + (char)keyCode ;
repaint();
}
protected void keyReleased(int keyCode){
action = "KR:" + (char)keyCode ;
repaint();
}
protected void keyRepeated(int keyCode){
action = "KRe:" + (char)keyCode ;
repaint();
}
}

}
這個程式將會響應手機的鍵盤行為,然後將點擊的鍵盤所對應的索引值顯示出來。從這個程式中我們可

以發現當Canvas子類成為正在響應的畫面的時候只要點擊鍵盤就會引發keyPressed()方法。鬆開的時候會

響應keyReleased()方法。而支援長按鍵響應的方法則是keyRepeated()方法(這個方法並不是所有的機器

都支援,比方說N記的6110我以前用的時候就沒有這個響應產生。所以必須要判斷一下。而判斷是否支援

長按鍵響應的方法是hasRepeatEvents())。KEY_NUM0~~KEY_NUM9,以及KEY_STAR、KEY_POUND是所有機器

都支援的常數,而根據裝置的不同也會有不同的其他對應值。為了程式能夠跨平台(呵呵,這可是java的

最大優勢之一哦),在開發的時候不到特殊情況最好只使用這幾個常規鍵盤響應。當然,為了遊戲設計的

方便,在MIDP中Canvas定義了幾個Game鍵盤代碼:UP

,DOWN,LEFT,RIGHT,FIRE,GAME_A,GAME_B,GAME_C,GAME_D。同時定義了getGameAction()以及getKeyCode()

兩個方法。來處理相關的行為轉化。

手寫筆控制事件處理,由於俺沒有相關裝置也沒有下模擬器,所以就沒有仔細的研究,大概的看了一

下幾個比較重要的東西。手寫筆點擊螢幕,引發pointerPressed()方法,並傳入點擊點在螢幕上的x,y坐

標。pointerReleased()則在手寫筆離開螢幕的時候響應。而pointerDragged()則是手寫筆在螢幕上的移

動時響應的方法,同時會產生相應的x,y座標。如果我們開發程式需要跨平台,支援在響應手寫筆事務處

理之前必須要使用hasPointerEvents()來判斷裝置是否支援手寫筆。hasPointerMotionEvents()則會判斷

是否支援手寫筆在螢幕上移動產生pointerDragged()方法。

當然,還有繪圖處理以及呼叫處理。。。實在是怕自己一下下接受不了那麼多概念。。。呵呵,準備

休息一下。這幾天好好的把自己前幾天看的東西再看看。溫故而知新嘛^_^

============================================

最後想說說,因為這段時間看我寫這個筆記的朋友也很多,但是總是沒有人回應。讓我覺得鬱悶,我

只是希望能起到一個拋磚引玉的作用,希望更多的兄弟一起來學習,共同提高,也來幫幫小弟一下。。呵

呵。。。希望大家留個言哦。。^_^



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。