1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      分析MIDP的事件處理機制

      更新時間: 2007-01-19 09:50:38來源: 粵嵌教育瀏覽量:1354

        MIDP中的事件處理機制在J2ME用戶圖形界面開發中具有舉足輕重的地位,本文將深入分析MIDP事件處理機制,本文提供的程序是新手學習不錯的例子。在接下來的文章我會繼續講述低級事件處理機制。

        MIDP的事件處理處理機制同樣是采用回調的機制,你可以參考AWT的事件處理原理。在MIDP中分事件處理和低級事件處理,前者主要是針對UI,而后者主要是這對Canvas這樣的低級UI的。不管怎樣,我們必須首先介紹的是Command類,移動信息設備的輸入主要來自于手機的鍵盤,導航則主要是由按鈕來完成的,例如軟鍵和導航鍵。Command類包裝了動作的信息,但是并沒有包括動作觸發后應該做什么,這些是在CommanListener內實現的。看看Command的構造器吧
      Command command = new Command("退出",Command.EXIT,1),構造器的參數分別表示按鈕的標簽,按鈕的類型和優先級別。移動信息設備是根據后面兩個參數對按鈕進行布局的。

        事件處理主要由兩個接口來實現,一個是CommandListener,一個是ItemStateListener。在CommandListener中定義了方法commandAction(Command cmd,Displayable disp),我們必須實現這個方法來完成事件處理,告訴應用程序當在disp界面下如果cmd按鈕并按下的時候他應該去做什么。ItemStateListener中定義了方法itemStateChanged(Item item),應用程序通過他來得到在Form內的item內部狀態發生變化的事件。用戶在進行如下操作的時候都會觸發這樣的事件,調整交互性Guage、在TextField內輸入或者修改內容、修改DateField、改變ChoiceGroup的狀態。

        盡管我們已經通過上面的介紹了解了事件處理的機制,但是你會發現我們進行用戶界面導航的時候仍然非常的麻煩,因為這不是在瀏覽器上開發界面,我們能做的只能是通過Command來進行處理。下面我將通過一個例子來說明如何使用CommandListener和ItemStateListener,這個例子有兩個界面一個界面用來輸入另一個用來顯示用戶的輸入。在輸入界面如果我們選擇click這個ChoiceGroup,界面會出現另外一個文本輸入,如果我們不選擇他就不會出現。在這樣一個程序中充分說明了如何使用上述兩個接口來完成MIDP事件的處理,但是也暴露出了導航難得問題,在以后的文章中我會介紹如何使用MVC的設計模式來解決這個問題。

        程序源代碼如下所示:
      import javax.microedition.lcdui.Display;
      import javax.microedition.midlet.MIDlet;
      import javax.microedition.midlet.MIDletStateChangeException;

      public class HighLevelMIDlet extends MIDlet
      {


          private Display display;
          private MainUI mainUI;
          private DisplayUI displayUI;
          
        
          protected void startApp() throws MIDletStateChangeException
          {
               initMIDlet();


          }
         
          private void initMIDlet()
          {
              display = Display.getDisplay(this);
              mainUI = new MainUI(this);
              displayUI = new DisplayUI(this,mainUI);
              display.setCurrent(mainUI);
          }
         
          public DisplayUI getDisplayUI()
          {
              return displayUI;
          }
          public Display getDisplay()
          {
              return display;
          }



          protected void pauseApp()
          {
             


          }



          protected void destroyApp(boolean arg0) throws MIDletStateChangeException
          {
             


          }


      }

      import javax.microedition.lcdui.Choice;
      import javax.microedition.lcdui.ChoiceGroup;
      import javax.microedition.lcdui.Command;
      import javax.microedition.lcdui.CommandListener;
      import javax.microedition.lcdui.Displayable;
      import javax.microedition.lcdui.Form;
      import javax.microedition.lcdui.Item;
      import javax.microedition.lcdui.ItemStateListener;
      import javax.microedition.lcdui.TextField;
      import javax.microedition.midlet.MIDlet;



      public class MainUI extends Form implements CommandListener, ItemStateListener
      {


          private HighLevelMIDlet midlet;
          private TextField inputField;
          private ChoiceGroup choice;
          private TextField inputField2;
          private int index;
          public static final Command cmd = new Command("Display", Command.ITEM, 2);


          public MainUI(HighLevelMIDlet midlet)
          {
              super("form");
              this.midlet = midlet;
              init();
          }


          public void init()
          {
             
              inputField = new TextField("Input", null, 25, TextField.ANY);
              inputField2 = new TextField("Input2", null, 25, TextField.ANY);
              choice = new ChoiceGroup("click", Choice.MULTIPLE);
              choice.append("Another", null);
              this.append(inputField);
              this.append(choice);
              this.addCommand(cmd);
              this.setCommandListener(this);
              this.setItemStateListener(this);


          }



          public void commandAction(Command arg0, Displayable arg1)
          {
              if(arg0 == cmd)
              {
                  String input = inputField.getString();
                  System.out.println(input);
                  midlet.getDisplayUI().setInput(input);
                  midlet.getDisplay().setCurrent(midlet.getDisplayUI());
                 
              }


          }



          public void itemStateChanged(Item arg0)
          {
             
              if(arg0 == choice)
              {
                 
                  if(choice.isSelected(0) == true)
                  {
                      index = this.append(inputField2);
                  }
                  else
                  {
                      this.delete(index);
                  }
              }


          }


      }

      import javax.microedition.lcdui.Command;
      import javax.microedition.lcdui.CommandListener;
      import javax.microedition.lcdui.Displayable;
      import javax.microedition.lcdui.Form;
      import javax.microedition.lcdui.StringItem;



      public class DisplayUI extends Form implements CommandListener
      {


          private HighLevelMIDlet midlet;
          private StringItem displayItem;
          private Displayable backUI;
          public static final Command backCommand = new Command("Back", Command.BACK,
                  2);


          public DisplayUI(HighLevelMIDlet midlet,Displayable backUI)
          {
              super("Display");
              this.midlet = midlet;
              this.backUI = backUI;
              init();
              this.addCommand(backCommand);
              this.setCommandListener(this);
          }


          private void init()
          {
              displayItem = new StringItem("you input", null);
              this.append(displayItem);
          }
         
          public void setInput(String input)
          {
              displayItem.setText(input);
          }
        
          public void commandAction(Command arg0, Displayable arg1)
          {
              if(arg0 == backCommand)
              {
                  midlet.getDisplay().setCurrent(backUI);
              }


          }


      }

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲最新中文字幕aⅴ天堂 香蕉久久高清免费 | 亚洲精品分类在看在线观看 | 宅男在线国产精品 | 亚洲欧美不卡视频在线播放 | 亚洲AV秘一区二区 | 玖玖资源综合视频在线 |