Board logo

标题: 在定制 SWT 组件中实现 MVC(3) [打印本页]

作者: look_w    时间: 2018-7-16 12:12     标题: 在定制 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                这样的简单而强大的开发平台的到来,程序员可以轻易地用更短的时间和最小的复杂程度,开发出更丰富的用户界面。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0