原文 http://hzxdark.javaeye.com/blog/175628
http://www.3geye.net/?3/viewspace-3177
kbox 是一個MVC2模型的J2ME開源框架,用于快速開發可擴展的J2ME MIDP應用程序。
主頁:http://kbox-mvc.sourceforge.net/
其結構如圖:

所有的可視組件都位于需要經由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傳遞參數(當然你喜歡的話,也可以將參數提到配置文件里去……)。
http://www.3geye.net/?3/viewspace-3177
kbox 是一個MVC2模型的J2ME開源框架,用于快速開發可擴展的J2ME MIDP應用程序。
主頁:http://kbox-mvc.sourceforge.net/
其結構如圖:

所有的可視組件都位于需要經由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傳遞參數(當然你喜歡的話,也可以將參數提到配置文件里去……)。