使用J2ME的MVC2开源框架KBOX

http://www.sina.com.cn    2009年08月05日 16:50    IT168.com
转载http://tech.sina.com.cn/s/2009-08-05/16501014584.shtml
配置文件:kbox,cfg.property
res.property
.PARAMETERS.  用于匹配commandAction触发事件处理
.ACTION 用于匹配keyPressedAction触发事件处理

文本Tag: J2ME

  【IT168 技术】 kbox 是一个MVC2模型的J2ME开源框架,用于快速开发可扩展的J2ME MIDP应用程序。

  其结构如图:

 

   所有的可视组件都位于需要经由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。

源代码见附件

知识积累-KBOX2相关推荐

  1. 人工智能伦理如何设定,从种群层面看人类的知识积累和进化

    前言:9月份中宣部出版局<中国图书评论>对<崛起的超级智能>进行了推荐和评论,对其中阐述的种群知识库扩展观点给予了重点关注.应该说种群知识库扩展是互联网大脑架构不断发展的抽象推 ...

  2. Winform开发几个常用的开发经验及知识积累(一)

    本人做Winform开发多年,孜孜不倦,略有小成,其中收集或者自己开发一些常用的东西,基本上在各个项目都能用到的一些开发经验及知识积累,现逐步介绍一些,以飨读者,共同进步.  1.窗口[×]关闭按钮变 ...

  3. WinRT知识积累1之读xml数据

    前述:这个知识是在Windows8.1或WP8.1中运用Linq to xml获取一个xml文件里的数据.(网上也很多类似的知识,可以借鉴参考) 平台:windows8.1 metro 或者WP8.1 ...

  4. 计算机C语言常用语句,计算机二级C语言考试常见知识积累

    形式化方法是一种特别的基于数学的技术,用于软件和硬件系统的形式规范.开发以及形式验证.下面是小编整理的关于计算机二级C语言考试常见知识,欢迎大家参考! 选择结构 [考点1]关系运算 关系运算符有6个, ...

  5. java 知识积累_java学习知识积累-spring常用注解

    java学习知识积累-spring常用注解 类的分层注解,由于我们后台开发都是分为三层进行开发的,所以Spring框架提供了三种对于不同层的注解方式: 控制层:@Controller 服务层:@Ser ...

  6. HTML知识积累及实践(一)- 标签样式

    HTML知识积累及实践(一) - 标签样式 1.认识HTML (1)HTML不是一种语言,而是一种标记语言 (2)标记语言是由标记标签和纯文本组成的 (3)HTML使用标记标签描述网页 2.HTML标 ...

  7. 如何将零碎信息结构化并做到有序安放,以实现知识积累?

    如何"将零碎信息结构化"?"结构化"这词有点难理解,以三体为例解释一下.三体里面有一个歌者,文明是比三体人还要高级的一个文明.还有一个清理工具叫二向箔.二向箔比 ...

  8. 易支付相关知识积累(easyPay)

    关键字:易支付相关知识积累. 易支付交易流程如下: [ 1 ] 网上消费者浏览检索商户网页: [ 2 ] 网上消费者在商户网站下订单: [ 3 ] 网上消费者选择支付方式--"首信易支付&q ...

  9. 【mysql知识积累】

    mysql知识积累 mysql的八大数据类型 mysql索引失效的常见原因(八字口诀) mysql(Mysiam和innodb的区别) mysql的八大数据类型 1.整数类型(Integer Type ...

最新文章

  1. Javascript 的addEventListener()及attachEvent()区别分析
  2. 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】
  3. HDFS的API操作-访问权限问题
  4. 7-7 有重复元素的全排列 (10 分)(set容器做法思路加详解)
  5. : 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-fronte
  6. java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中
  7. java 判断闰年和月份_java----根据输入的年月判断闰年和打印日历
  8. 【项目管理】阿尔法项目经理的时间投入启示
  9. linux v4l2 python,v4l2 Python - 流视频 - 映射缓冲区
  10. Python xlwt : More than 4094 XFs (styles) 解决方法
  11. Tricks(四十二)—— 数据集分块
  12. yum repolist命令
  13. 《多媒体技术与应用》知识点整理
  14. ANSYS Workbench 目标参数优化案例分析
  15. html数独游戏源代码,数独游戏求解程序(附源代码)
  16. 利用华为手机给台式机提供网络
  17. 反弹球消砖块C语言重构函数封装
  18. 在c语言的switch 语句中,的case后面的表达式,switch语句中case后面的值必须是什么?...
  19. [ATF] ARM Trusted firmware 构建选项
  20. 基于QT实现的可视化链表(单链表、循环链表、双向链表)

热门文章

  1. LC-799.香槟塔
  2. Android 绘制原理
  3. 常见jquery面试题20道
  4. 批量提取图片信息[大小、宽高尺寸和分辨率]
  5. VS2019智能提醒突然变慢——安装NVIDIA CUDA导致
  6. mybatis中的resultMap,超详细讲解
  7. mysql npe问题_万恶的 NPE 如何避免,几种你必须知道的方案!!!
  8. python语句中print(0xa+0xb)的输出结果是_Python语句print(0xA+0xB)的输出结果是
  9. selenium webdriver 页面刷新
  10. Flash--椭圆工具的使用