J2ME的MVC2开源框架KBOX
所有的可视组件都位于需要经由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… |
以上是 J2ME的MVC2开源框架KBOX 的全部内容, 来源链接: utcz.com/p/205933.html