快速业务通道

在定制SWT组件中实现MVC - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

在定制SWT组件中实现MVC

时间:2011-09-09 Tejas R Parajia

学习如何容易地把模型 - 视图 - 控制器与基于 Eclipse 的应用程序集成在 一起

简介: Eclipse SWT(标准部件工具包)提供了丰富的 API 集来实现定制部 件(widget)。在这篇文章中,作者简要概括了 MVC(模型 - 视图 - 控制器) 架构,以结构化查看器的形式解释了 MVC 的当前实现,并介绍了一种使用定制 SWT 部件的实现。

什么是 MVC?

MVC 架构(或设计模式)是图形用户界面(GUI)的设计样式,由三部分构成 :模型、视图和控制器。MVC 把表示层从数据解耦出来,也把表示从数据的操作 解耦出来。

实现 MVC 架构与其他类型的应用程序有所不同。主要的区别来自如何放置和 实现业务逻辑或查看呈现逻辑。与典型的 Web 应用程序不同,在这类程序中, 程序员必须设计和实现所有 MVC 组件,而 Eclipse 提供的 API 可以替您做大 部分控制或呈现工作。所以,不能严格地把 Eclipse 的 MVC 实现与 Web 或其 他应用程序类型的 MVC 进行比较。

Eclipse JFace

Eclipse JFace 用内容提供者和标签提供者实现 MVC 架构。JFace API 包装 了标准(并非不重要的)部件,例如表和树,并实现了结构化内容提供者和标签 提供者。可以根据部件类型实现不同的内容提供者。面向列表的查看器会实现结 构化查看器,而内容则以结构化(列表的)方式映射到部件条目上。

基类叫做 Viewer,它是结构化查看器的一个扩展。查看器充当部件容器。内 容提供者以结构化的方式得到数据;类似地,标签提供者获得对应的标签。 JFace 查看器实现检索该数据,设置对应的关联,并用数据集更新用户界面(UI )组件。它还执行选择、过滤和排序。

如何实现 JFace

Eclipse View 和 Viewer 负责执行大部分 JFace 控制功能。Viewer 或者说 MVC 的视图部分,也充当部件容器;这是表示组件。

Eclipse View 实例化 Viewer、内容提供者和标签提供者,并充当模型,容 纳值对象,并在 Viewer 中把它们设置为 inputElement。

要创建 View,请用 createPartControl() 方法实例化 Viewer。清单 1 实 例化一个默认的树查看器;您也可以定制树,并用树对象作为参数,用构造函数 实例化树查看器。

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

时间:2011-09-09 Tejas R Parajia

清单 1. ExampleView 的 CreatePartControl 方法

public class ExampleView extends ViewPart { ... public void createPartControl(Composite parent) { // define a grid layout GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 0; layout.marginWidth = 0; l ayout.horizontalSpacing = 0; layout.verticalSpacing = 1; parent.setLayout(layout); // create widgets createActionBar (parent); createTree(parent); // add context menu and listeners viewer.addDoubleClickListener(this); viewer.addSelectionChangedListener(openAction); // register viewer so actions respond to selection getSite().setSelectionProvider (viewer); hookContextMenu(); } private void createTree (Composite parent) { viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); viewer.setContentProvider(new ExampleViewContentProvider()); viewer.setLabelProvider (new ExampleViewLabelProvider()); viewer.setSorter(new ViewerSorter ()); viewer.setInput(ModelManager.getExampleModel ()); viewer.getControl().setLayoutData(new GridData (GridData.FILL_BOTH)); } ... }

在另一个独立类中实现 ContentProvider,它是一个对象,用适合查看器类 型的接口向视

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号