邋遢居

我的Java天堂

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

                                                        RCP学习笔记(一) Viewer合作类的模式

Viewer是逻辑对象(或叫做领域模型)和显示对象之间的一个桥梁。他的主要的任务就是根据逻辑对象来填充窗体组件。一般需要三个类来完成Business Object 在窗体组件中的显示。我们这里同过使用TableView来演示这部分的功能。

TableViewer的责任是用特定的对象填充到Table窗体组件中。是我们最终在窗体要看到的对象。如下图所示的一部分:
tableviewer.gif

IStructuredContentProviderITableLabelProvider的实现类是用来帮助TableViewer来完成这个任务的。

1、  IStructuredContentProvider的任务是“根据给定的对象,返回一个对应的领域对象”1。是通过:public Object[] getElements(Object arg0)2方法实现的。

2、  ITableLabelProvider 的任务是“返回展现领域对象的所需的图标和文字”。这两个任务分别是通过public Image getColumnImage(Object element, int columnIndex);

public String getColumnText(Object element, int columnIndex);这两个方法实现的。他们的传入参数都是:Object element, int columnIndexElement表示当前行所要展现的数据对象,columnIndex表示的当前处理的列号,他是从零开始记的。

知道了他们之间分配的职能后,我们就可以看看他们是怎么协作的了。在TableView的需要显示的输入对象改变了(调用了setInput方法可以触发待显示领域对象的改变),这就会触发TableViewInputChange事件,这时候TableView就会去调用他本身的refresh3方法。最终会在getRawChildren方法中调用IStructuredContentProvider实现类中的getElements方法或的一个Object[]。供以后创建Item时使用。整个调用过程可以用下面的strack图来表示:
gettreetrack.gif
通过调用IStructuredContentProvider获的了一个对象数组后,就会根据对象数组来创建显示的Item。我们可以先看一下ITableLabelProviderTableLabelProviderITableLabelProvider的一个实现类)。createItem.gif

在更新Item的时候提供每个TableView需要的TextImage就好了。他们最终在TableViewerdoUpdateItem方法中调用ITableLabelProvidergetColumnTextgetColumnImage方法。

 

要实现一个在TableView中显示特定对象只需要实现IStructuredContentProvider实现类的getElements方法。和ITableLabelProvidergetColumnText方法。

下面是我示例中的代码:

TableLabelPrivatetablelable.gif

TableContentPrivate
contentprivate.gif




Viewer也都是采用ContentProvideLabelProvide的协作方式来工作。

其他的

参考文献:

1、  Contributing to Eclipse 中文版 Page 290

2、  org.eclipse.jface.viewers. IStructuredContentProvider.java

3、  这个方法继承自StructuredViewer。可参考StructuredViewer.java



posted on 2005-12-11 11:24 Jet Geng 阅读(1808) 评论(0)  编辑  收藏 所属分类: Eclipse

只有注册用户登录后才能发表评论。


网站导航: