- J2ME手機(jī)游戲設(shè)計(jì)與開(kāi)發(fā)
- 劉暢 張旭輝編著
- 212字
- 2019-01-01 07:08:54
3.3 高級(jí)屏幕類(lèi)的事件響應(yīng)
如果僅有顯示界面的話,程序是沒(méi)有意義的,建立良好的用戶(hù)交互是應(yīng)用程序中非常重要的環(huán)節(jié),本節(jié)內(nèi)容將對(duì)程序中進(jìn)行交互的事件響應(yīng)機(jī)制進(jìn)行分析和講解。
3.3.1 事件響應(yīng)基本原理
在MIDP程序中交互的方式與Java程序類(lèi)似,就是依靠事件響應(yīng)機(jī)制,當(dāng)觸發(fā)某個(gè)事件時(shí)(例如按下按鈕)則調(diào)用事件的響應(yīng)方法,執(zhí)行相應(yīng)的方法中所編寫(xiě)的邏輯內(nèi)容。
高級(jí)事件處理主要是由兩個(gè)接口實(shí)現(xiàn)的,一個(gè)是CommandListener,其中定義了方法commandAction(Command cmd,Displayable disp),當(dāng)在被顯示界面中按下按鈕時(shí)執(zhí)行這個(gè)方法內(nèi)的代碼;另一個(gè)是ItemStateListener(Item item),當(dāng)應(yīng)用程序?qū)orm界面中添加的Item組件進(jìn)行操作時(shí)執(zhí)行這個(gè)方法內(nèi)的具體代碼,例如在TextField內(nèi)輸入或修改文本內(nèi)容、改變ChoiceGroup內(nèi)的選擇狀態(tài)等。
3.3.2 Command類(lèi)及其常用方法
Command:javax.microedition.lcdui.Command
Command類(lèi)不是高級(jí)屏幕類(lèi),而是能夠添加在高級(jí)屏幕類(lèi)對(duì)象上的進(jìn)行交互響應(yīng)的對(duì)象。Command類(lèi)封裝了一個(gè)動(dòng)作的語(yǔ)義信息,主要以用戶(hù)界面的形式來(lái)表達(dá),其常用方法如表3-5所示。
表3-5 Command類(lèi)的常用方法
Command類(lèi)的具體用法如下。
首先定義并構(gòu)造一個(gè)Command對(duì)象實(shí)例:
Command cmd; cmd=new Command("退出",Command.EXIT,1);
然后將Command對(duì)象添加到Form上:
Form mainForm=new Form("Command"); mainForm.addCommand(cmd);
構(gòu)建Command對(duì)象時(shí),第1個(gè)參數(shù)“退出”為Command對(duì)象的標(biāo)簽,顯示給用戶(hù)表示Command對(duì)象的名稱(chēng)。第2個(gè)參數(shù)“Command.EXIT”代表的是Command對(duì)象的類(lèi)型,Command類(lèi)中定義了8種類(lèi)型,代表不同的語(yǔ)義,其具體類(lèi)型及含義如表3-6所示。第3個(gè)參數(shù)表示Command對(duì)象的優(yōu)先級(jí),必須為整數(shù),數(shù)值為1代表非常重要,依次為2、3、4等。
表3-6 Command對(duì)象類(lèi)型
說(shuō)明:
1.如果軟鍵類(lèi)型的值無(wú)效,則拋出java.lang.IllegalArgumentException;
2.如果標(biāo)簽參數(shù)的值為null,則拋出java.lang.NullPointerException;
3.一旦對(duì)象構(gòu)造完成,就不能再對(duì)標(biāo)簽、類(lèi)型、優(yōu)先級(jí)3個(gè)信息進(jìn)行修改;
4.如果是相同類(lèi)型,則優(yōu)先級(jí)高的最容易被找到;
5.當(dāng)添加多個(gè)軟鍵時(shí),左右位置有可能會(huì)發(fā)生改變;
6.所定義的類(lèi)型值并不是一定按照對(duì)應(yīng)操作執(zhí)行的,需要通過(guò)接口CommandListener來(lái)具體實(shí)現(xiàn)。例如定義軟鍵的類(lèi)型為退出,但是真正實(shí)現(xiàn)程序的退出需要由CommandListener編寫(xiě)代碼來(lái)完成真正的退出操作。
3.3.3 CommandListener接口
如果只是添加Command對(duì)象并不能實(shí)現(xiàn)具體的功能,只有為高級(jí)屏幕類(lèi)中的Command對(duì)象添加監(jiān)聽(tīng)后,才會(huì)接收來(lái)自MIDP實(shí)現(xiàn)的高級(jí)事件,響應(yīng)具體操作。
Command cmd; cmd=new Command("退出",Command.EXIT,1); Form mainForm=new Form("Command"); mainForm.addCommand(cmd); mainForm.setCommandListener(this);
以上最后一句代碼中的參數(shù)this表示傳入的參數(shù)為本類(lèi),而setCommandListener方法需要傳入的參數(shù)是CommandListener對(duì)象,所以要讓本類(lèi)實(shí)現(xiàn)CommandListener接口,類(lèi)頭就會(huì)被改為public class mainMidlet extends MIDlet implements CommandListener。實(shí)現(xiàn)CommandListener接口就要實(shí)現(xiàn)接口中的抽象方法CommandAction()。例如:
public void commandAction(Command c, Displayable d) { try { if(c==cmd) { //執(zhí)行程序退出 destroyApp(false); notifyDestroyed(); } } catch (Exception e) { } }
程序的執(zhí)行結(jié)果如圖3-4所示。
destroyApp():當(dāng)程序調(diào)用destroyApp()時(shí),系統(tǒng)通知MIDlet進(jìn)入Destroyed狀態(tài),如果傳入的參數(shù)為false,那么MIDlet可以在接收通知后拋出MIDletStateChangeException異常而保持當(dāng)前狀態(tài),如果傳入的參數(shù)為true則立即進(jìn)入Destroyed狀態(tài)。在一個(gè)程序中可以添加多個(gè)軟鍵,代碼參見(jiàn)【例3-3】。
【例3-3】 添加多個(gè)軟鍵。
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class mainMidlet extends MIDlet implements CommandListener{ Display display; Command commmandOK; Command commmandCancel; Command commmandScreen; Command commmandExit; Form f; public mainMidlet() { display=Display.getDisplay(this); commmandCancel=new Command("取消",Command.CANCEL,2); commmandOK=new Command("確定",Command.OK,2); commmandExit=new Command("結(jié)束",Command.EXIT,1); commmandScreen=new Command("屏幕",Command.SCREEN,2); f=new Form("Command"); //添加按鈕 f.addCommand(commmandCancel); f.addCommand(commmandExit); f.addCommand(commmandOK); f.addCommand(commmandScreen); f.setCommandListener(this); } protected void destroyApp(boolean arg0) throws MIDletStateChange Exception { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { display.setCurrent(f); } public void commandAction(Command cmd, Displayable d) { try { if(cmd==commmandCancel) { System.out.println("cancel"); }else if(cmd==commmandOK) { System.out.println("ok"); }else if(cmd==commmandScreen) { System.out.println("screen"); }else if(cmd==commmandExit) { destroyApp(false); notifyDestroyed(); } } catch (Exception e) { } } }
程序的執(zhí)行結(jié)果如圖3-5所示,當(dāng)按下不同的軟鍵時(shí)控制臺(tái)會(huì)輸出不同的提示信息。

圖3-4 “退出”軟鍵

圖3-5 添加多個(gè)軟鍵效果圖
- PostgreSQL 11 Server Side Programming Quick Start Guide
- 手把手教你學(xué)AutoCAD 2010
- 大數(shù)據(jù)驅(qū)動(dòng)的機(jī)械裝備智能運(yùn)維理論及應(yīng)用
- 水下無(wú)線傳感器網(wǎng)絡(luò)的通信與決策技術(shù)
- Excel 2007終極技巧金典
- Learn QGIS
- 電腦上網(wǎng)入門(mén)
- 機(jī)器人制作入門(mén)(第4版)
- 網(wǎng)頁(yè)設(shè)計(jì)與制作
- Python語(yǔ)言從入門(mén)到精通
- 信息系統(tǒng)安全保障評(píng)估
- 特征工程入門(mén)與實(shí)踐
- 百度智能小程序:AI賦能新機(jī)遇
- 多傳感器數(shù)據(jù)智能融合理論與應(yīng)用
- 仿蛛機(jī)器人的設(shè)計(jì)與制作