SWT框架原理

    本文讲述SWT模型框架的基本原理,这对理解如何创建和使用SWT模型有帮助。

1.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对象是保存在全局变量上下文中的,所以也可以在运行时动态修改对象等。

2.父子关系

    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);
}

3.学习和使用SWT模型

    SWT模型是对Eclispe的开源SWT类库的封装,基本文档可以参看http://www.eclipse.org/swt/

    XWorker中包含了SWT模型的文档和使用方法,在事物管理器的主页中可以找到。

 

Copyright ©  2007-2014 XWorker.org  版权所有

沪ICP备08000575号