官术网_书友最值得收藏!

3.3 高級屏幕類的事件響應

如果僅有顯示界面的話,程序是沒有意義的,建立良好的用戶交互是應用程序中非常重要的環節,本節內容將對程序中進行交互的事件響應機制進行分析和講解。

3.3.1 事件響應基本原理

在MIDP程序中交互的方式與Java程序類似,就是依靠事件響應機制,當觸發某個事件時(例如按下按鈕)則調用事件的響應方法,執行相應的方法中所編寫的邏輯內容。

高級事件處理主要是由兩個接口實現的,一個是CommandListener,其中定義了方法commandAction(Command cmd,Displayable disp),當在被顯示界面中按下按鈕時執行這個方法內的代碼;另一個是ItemStateListener(Item item),當應用程序對Form界面中添加的Item組件進行操作時執行這個方法內的具體代碼,例如在TextField內輸入或修改文本內容、改變ChoiceGroup內的選擇狀態等。

3.3.2 Command類及其常用方法

Command:javax.microedition.lcdui.Command

Command類不是高級屏幕類,而是能夠添加在高級屏幕類對象上的進行交互響應的對象。Command類封裝了一個動作的語義信息,主要以用戶界面的形式來表達,其常用方法如表3-5所示。

表3-5 Command類的常用方法

Command類的具體用法如下。

首先定義并構造一個Command對象實例:

Command cmd;
cmd=new Command("退出",Command.EXIT,1);

然后將Command對象添加到Form上:

Form mainForm=new Form("Command");
mainForm.addCommand(cmd);

構建Command對象時,第1個參數“退出”為Command對象的標簽,顯示給用戶表示Command對象的名稱。第2個參數“Command.EXIT”代表的是Command對象的類型,Command類中定義了8種類型,代表不同的語義,其具體類型及含義如表3-6所示。第3個參數表示Command對象的優先級,必須為整數,數值為1代表非常重要,依次為2、3、4等。

表3-6 Command對象類型

說明:

1.如果軟鍵類型的值無效,則拋出java.lang.IllegalArgumentException;

2.如果標簽參數的值為null,則拋出java.lang.NullPointerException;

3.一旦對象構造完成,就不能再對標簽、類型、優先級3個信息進行修改;

4.如果是相同類型,則優先級高的最容易被找到;

5.當添加多個軟鍵時,左右位置有可能會發生改變;

6.所定義的類型值并不是一定按照對應操作執行的,需要通過接口CommandListener來具體實現。例如定義軟鍵的類型為退出,但是真正實現程序的退出需要由CommandListener編寫代碼來完成真正的退出操作。

3.3.3 CommandListener接口

如果只是添加Command對象并不能實現具體的功能,只有為高級屏幕類中的Command對象添加監聽后,才會接收來自MIDP實現的高級事件,響應具體操作。

Command cmd;
cmd=new Command("退出",Command.EXIT,1);
Form mainForm=new Form("Command");
mainForm.addCommand(cmd);
mainForm.setCommandListener(this);

以上最后一句代碼中的參數this表示傳入的參數為本類,而setCommandListener方法需要傳入的參數是CommandListener對象,所以要讓本類實現CommandListener接口,類頭就會被改為public class mainMidlet extends MIDlet implements CommandListener。實現CommandListener接口就要實現接口中的抽象方法CommandAction()。例如:

public void commandAction(Command c, Displayable d) {
        try {
            if(c==cmd)
            { //執行程序退出
              destroyApp(false);
              notifyDestroyed();
            }
        } catch (Exception e) {
        }
}

程序的執行結果如圖3-4所示。

destroyApp():當程序調用destroyApp()時,系統通知MIDlet進入Destroyed狀態,如果傳入的參數為false,那么MIDlet可以在接收通知后拋出MIDletStateChangeException異常而保持當前狀態,如果傳入的參數為true則立即進入Destroyed狀態。在一個程序中可以添加多個軟鍵,代碼參見【例3-3】。

【例3-3】 添加多個軟鍵。

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("結束",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) {
        }
    }
}

程序的執行結果如圖3-5所示,當按下不同的軟鍵時控制臺會輸出不同的提示信息。

圖3-4 “退出”軟鍵

圖3-5 添加多個軟鍵效果圖

主站蜘蛛池模板: 明光市| 泰安市| 罗源县| 齐河县| 克什克腾旗| 遂川县| 阜新市| 和静县| 新宁县| 东乡族自治县| 周至县| 海淀区| 禹州市| 凤冈县| 突泉县| 金乡县| 安新县| 太仆寺旗| 马山县| 马山县| 四川省| 迭部县| 墨竹工卡县| 苏尼特右旗| 洪江市| 都昌县| 兰考县| 龙南县| 安阳县| 南漳县| 义乌市| 从江县| 平度市| 东山县| 五寨县| 石渠县| 洛宁县| 乌拉特前旗| 鹤岗市| 甘肃省| 抚顺县|