首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

在定制 SWT 组件中实现 MVC(3)

在定制 SWT 组件中实现 MVC(3)

创建字段(视图)Field是一个抽象类,它定义了包含各种用户界面控件的方法,还有全局地识别这些控件的相关 ID。每个用户界面控件都是                    Field的子类,并向内容提供者提供了读写能力。用工厂模式,在 Layout类中创建了 Field。
清单 6. 用 Field                类创建文本对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class TextField extends Field {
   /**
         * @param control
         * @param id
         */
   public TextField(Control control, int id) {
       super(control, id);
   }
   /* Based on the ID of the widget, values retrieved from
    * the content provider are set.
    */
   public  void readFromContent(IExampleContentProvider content) {
       String newText = (String )content.getElement(getId());
       if (newText != null)
           ((Text )_control).setText(newText);
   }
   /* Based on the ID of the widget, values retrieved from widget are
    * sent back to the content provider.
    */
   public void writeToContent(IExampleContentProvider content) {
       String newText = ((Text )_control).getText();
       content.setElement(getId(), newText);
   }
}




简化内容提供者(模型)ExampleViewContentProvider充当模型侦听器,后者扩展自                IStructuredContentProvider。它是 Eclipse API                的简单实现,提供了用于检索数据的回调。每个请求数据的条目都基于视图创建时在布局中为条目定义的惟一 ID。
方法调用会返回与每个定义的全局 ID 关联的数据。在 所示的内容提供者中,可以使用适配器从                XML 文件或数据库检索数据。
清单 7. 在定制的 ContentProvider                中实现方法
1
2
3
4
5
6
7
8
9
10
public Object getElement(int iIndex) {
       switch (iIndex) {
       case FIRST_INDEX: return "developer@ibm.com";
       case SECOND_INDEX : return new Integer(1);
       case FOURTH_INDEX : return new Boolean(true);
       case THIRD_INDEX: return new Boolean(false);
       case FIFTH_INDEX: return new Boolean(false);
       }
       return null;
   }




创建了控件并初始化布局之后,表单会用控件 ID 要求内容提供者用数据填充表单控件。
清单 8.                初始化布局并填充控件的表单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public Form (Composite parent, int style, FieldMode mode,
    ExampleViewContentProvider content) {
    super(parent, style);
    _content = content;
    _style = style;
    setMode(mode);
    init(style);
}
     
private void init(int style) {
    createControls(style);
    controlsCreated();
}

protected void controlsCreated() {
    readFromContent();
}




结束语Web 应用程序是 MVC 架构样式的早期实现者。但是,随着像 Eclipse                这样的简单而强大的开发平台的到来,程序员可以轻易地用更短的时间和最小的复杂程度,开发出更丰富的用户界面。
返回列表