文章目录

RCP中的view基本上是由JFace的组件提供的.

Eclipse JFace 用ContentProvider和LabelProvider实现 MVC 架构.

RCP通过实例化viewer来实现MVC 的视图部分.而ContentProvider就是模型部分的.

看ContentProvider是要继承IStructuredContentProvider,其源码:

public Object[] getElements(Object inputElement);

可以看到输入的是object,所以其模型是和view无关的领域模型.

那要将这个模型展示在view上还需要通过LabelProvider来转换成适当的形式. 如下:

class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
public String getColumnText(Object obj, int index) {
return getText(obj);
}

public Image getColumnImage(Object obj, int index) {
return getImage(obj);
}

public Image getImage(Object obj) {
return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
}
}

就是在getColumnText中进行转换的,将Object中的需要显示的东西retrun出来.

在 public void createPartControl(Composite parent)中

viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); 1)
viewer.setContentProvider(new ViewContentProvider()); 2)
viewer.setLabelProvider(new ViewLabelProvider()); 3)
viewer.setInput(new String(){"One","Two","Three"}); 4)

如上代码 1)实例化了一个viewer 2)注入一个 ContentProvider 3)注入一个LabelProvider 4)将数据模型传入view

然后可以通过viewer.refresh();来刷新视图.

可以看出JFace的做法在尽量强制你必须构建独立于GUI的模型.

文章目录