程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用J2ME的MVC2開源框架KBOX

使用J2ME的MVC2開源框架KBOX

編輯:J2ME
kbox 是一個MVC2模型的J2ME開源框架,用於快速開發可擴展的J2ME MIDP應用程序。
其結構如圖:
structure
所有的可視組件都位於需要經由MIDlet來顯示,而MIDlet上的所有事件,包括鍵盤事件,按鈕事件提交到ActionController上,ActionController跟據配置文件,將事件轉發給相應的Action,Action將處理結果得到的可視組件(Displayable)通過ActionForward返回MIDlet顯示。

KBOX的使用非常簡單, 以一個HELLO WORLD 為例:
創建一個MIDLET:

public class TestMIDlet extends MIDlet{

         protected void startApp() throws MIDletStateChangeException {

                 ActionController controller = ActionController.getInstance(true);

                 controller.registerVIEwer(this);       //Register the MIDlet

 

                 MyKGameCanvas mgc = new MyKGameCanvas("MYGC");  //Create a GameCanvas

 

                 KCommand kc = new KCommand("TEST BUTTON", Command.HELP,1,"MYCMD",null);
                 mgc.addCommand(kc);
                 mgc.setCommandListener(controller);
                 Display.getDisplay(this).setCurrent(mgc);

         }

}

創建一個Canvas:

public class MyKGameCanvas extends KGameCanvas{

 

         public MyKGameCanvas(String uniqueID) {

                   super(uniqueID);

         }

         public void showString(String string){

                   Graphics g = this.getGraphics();

                   g.setColor(0xFFFFFFFF);

                   g.fillRect(0, 0, this.getWidth(), this.getHeight());

                   g.setColor(0xFF000000);

                   g.drawString(string, 0, 0, Graphics.TOP|Graphics.LEFT);

                   this.flushGraphics();

         }

}

 創建相應的Action:

public class TestAction implements Action{

         public void excute(KCommand cmd, Item item,  Displayable dis, ActionForward forward,Hashtable parameters) {

               

                   MyKGameCanvas mkc = ((MyKGameCanvas)dis);

                   mkc.showString("hello world! From "+mkc.getUniqueID()+"."+cmd.getUniqueID());

         }

}

 將按鈕事件注冊給Action:

DEBUG=true        //open the debug model of KBOX

CMD.MYCMD.ACTION=action.TestAction

注意這裡的MyKGameCanvas 繼承的KGameCanvas,而不是GameCanvas。KBOX的KGameCanvas類繼承自GameCanvas,當並沒有使用 GameCanvas那種使用線程監聽狀態的模型,而是重寫了keypressed等方法來處理鍵盤事件。另外,KGameCanvas的重寫的按鈕事件 的處理已經實現了重復按鍵情況,而且可以指定重復按鍵的靈敏度,這點是非常好用的:)

KCommand是KBOX擴展的按鈕組件。
KCommand kc = new KCommand("TEST BUTTON", Command.HELP,1,"MYCMD",null);
第一個參數是按鈕的名字,第二參數是按鈕類型,第三個參數是優先級,第四個參數是ID名,用於配置文件的映射,對應“ CMD.MYCMD.ACTION=action.TestAction”中的MYCMD,第五個參數是可傳遞參數,是一個Hashtable類型,用於向Action傳遞參數(當然你喜歡的話,也可以將參數提到配置文件裡去……)。

KBOX的Action是一個只有execute方法的接口,任何類只要實現了該接口,都可以是一個Action。

注冊一個鍵盤事件一樣很簡單:

public class TestKeyAction implements Action{

         public void excute(KCommand cmd, Item item,  Displayable dis, ActionForward forward,Hashtable parameters) {

                   MyKGameCanvas mkc = ((MyKGameCanvas)dis);

                   …

                   Do your business here.

                   ..

         }

}

 指定鍵盤事件的處理Action

DEBUG=true        //open the debug model of KBOX

CMD.MYCMD.ACTION=action.TestAction

KEY.MYGC.FIRE.ACTION=action.TestKeyAction…

KBOX的另外一個很實用的特性是DEBUG MODEL。
這個功能是用於在真機測試時,調試BUG用的。由於真機與模擬器不一定相同,當真機上拋出異常(真機上的異常無法察覺,沒有控制台啊!),而模擬器又一切正常的時候,這個功能就有用了:KBOX將捕獲到的異常的用一個ERROR PAGE顯示出來。不過注意在發布JAR包時,記得要去掉這個DEBUG模式,否則沒事按到個沒定義的鍵盤按鍵都會捕獲到未定義按鍵處理的異常……
要打開DEBUG模式需要在配置文件上指定DEBUG=true。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved