本文讲述SWT模型框架的基本原理,这对理解如何创建和使用SWT模型有帮助。
SWT模型的作用是使用模型作为配置表示SWT相关控件的信息,然后通过模型的create方法创建相应的SWT对象,并把SWT对象存放到变量上下文中的全局变量中。如下面的Shell模型的示意代码。
Shell模型示例。
<Shell name=“helloWorld" text="Hello World" width="800" height="300"/>
Shell模型的create方法的实现,用Java代码示意。
import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; public Shell{ public static Object create(ActionContext actionContext){ //获取模型,如示例中的HelloWorld模型 Thing self = actionContext.getObject("self"); //创建Shell对象 Shell shell = new Shell(null, SWT.NONE); //根据模型设置shell对象的属性 shell.setText(self.getString("text")); //Hello World shell.setWidth(self.getInt("width")); //800 shell.setHeight(self.getInt("height"));//640 //保存变量,把shell变量存储到全局变量上下文中 actionContext.g().put(self.get("name"), shell); return shell; } }
如果理解了以上SWT模型的作用,那么基本可以明白模型的作用主要是用来创建SWT对象的,而由于SWT对象是保存在全局变量上下文中的,所以也可以在运行时动态修改对象等。
SWT模型的API本身就非常适合用模型表示,因为在SWT中类的构造方法通常都包含parent变量,也就是SWT的各个控件之间是父子关系。
比如Button的构造函数,它就包含了一个parent变量。
public Button(Composite parent, int style)
由于父子关系的存在,使用模型就可以很容易的表示SWT对象,比如下面的模型代码。
<Shell name="hellworld"> <FIllLayout/> <Button name="button" text="Button"/> </Shell>
同样在Shell的create方法实现中,也要加入子节点的对象的创建。
//把shell变量作为parent放到变量栈的当前层 actionContext.peek().put("parent", shell); //创建子节点的对象,子节点的parent变量是shell for(Thing child : self.getChilds()){ child.doAction("create", actionContext); }
SWT模型是对Eclispe的开源SWT类库的封装,基本文档可以参看http://www.eclipse.org/swt/。
XWorker中包含了SWT模型的文档和使用方法,在事物管理器的主页中可以找到。
Copyright © 2007-2014 XWorker.org 版权所有