众所周知,对于RCP开发来说,属性视图是想到重要的一个东西。那么对于GEF开发来说说如何实现属性视图呢。本文将介绍两种方式来实现属性视图。
首先介绍第一种,也是最常用的一种方式。
(1). 大家都知道对于GEF开发来说,GEF的MVC架构,model层是非常重要的,属性视图也是可以在model层实现的,首先让自己定义的model实现IPropertySource接口,实现IPropertySource的getPropertyDescriptors()、getPropertyValue(Object id)和setPropertyValue(Object id, Object value)。其中getPropertyDescriptors()是你要定义的那些属性,getPropertyValue(Object id)是初始化的时候要加载的你定义的属性的值,setPropertyValue(Object id, Object value)是你改变这些之后,在这个方法里取对应地改变model中的值。这是第一种方法。也是最常用的方法。
(2).第二种方法是在你的要展示属性视图的model的控制器中的
public Object getAdapter(Class key) {
if (key == IPropertySource.class){
//返回一个继承自IPropertySource的对象
}
return super.getAdapter(key);
}
这种方式的最大的一个好处就是如果你的这个模型是可扩展的,那么可以通过这种方式,很方便的实现。
还有就是几个比较常见的属性类,TextPropertyDescriptor 文本属性描述器,每种描述器都可以给它设置校验器,来决定你的属性修改是否是正确的。其中描述器要实现ICellEditorValidator接口,如((TextPropertyDescriptor) descriptors[1]).setValidator(new PropertyNumberValidator())其中PropertyNumberValidator就实了 ICellEditorValidator接口,当然在我们自己实现接口的类中,我们也可以自己定一些属性,如下拉选择,下拉列表等。setCategory()是用来对属性进行分类的。
可能还有一种需求就是,某些不同的模型有一些相同的属性,我们要手动控制,有哪些模型是我们多选时属性视图里可以展示出来,ICellEditorValidator的setAlwaysIncompatible(true)表示多选模型时要展示出来的属性。