可以把Java API中的SWT控件包装成模型。
创建一个事物模型(一般是xworker.lang.MetaDescritpor3),定义Java API中相关对象所需要设置的属性和子节点等。
比如XWorker的Shell模型就定义了Shell对象常用的需要设置的属性。
编写模型的create方法,我们建议为了性能尽量使用JavaAction来编写。
create方法中的基本代码是创建相应的Java对象,根据模型设置Java对象属性等,最后返回创建的Java对象。
3//示意代码 public static Shell create(ActionContext actionContext){ //获取模型 Thing self = actionContext.getObject("self"); //创建Java对象 Shell shell = new Shell(diaplsy, SWT.NONE); //根据模型属性设置Java对象 Point sizePoint = UtilSwt.createPoint(self.getString("size")); if(sizePoint != null) shell.setSize(sizePoint); //保存到到全局变量上下文中 actionContext.g().put(self.getMetadata().getName(), shell); //返回对象 return shell; }
模型的属性的值可以是常量,也可以是变量,如果是变量,那么可以使用var、ognl、action等等表达式。
//常量 int width = self.getInt("width"); //变量,getXXX方法三个参数的,有名字、默认值和变量上下文的通常是获取变量值 int width = self.getInt("width", 10, actionContext);
如果模型允许有子节点,比如控件的布局子节点等,那么需要在create方法中执行子节点的create方法。
//把Java对象以变量名parent放到当前的变量栈中 actionContext.peek().put("parent", shell); //执行子节点的create方法 for(Thing child : self.getChilds()){ child.doAction("create", actionContext); }
如果希望控件可以设计器所管理,那么调用Designer的attach()方法。
//绑定到designer,使用鼠标中键双击可以打开菜单,可以通过菜单编辑模型等 if(!shell.isDisposed()){ Designer.attach(shell, self.getMetadata().getPath(), actionContext); }
把新模型以child的方式注册到xworker.swt.Widgets模型下。
Copyright © 2007-2014 XWorker.org 版权所有