当前位置: 代码迷 >> Eclipse >> 应用Eclipse自带的PropertySheet
  详细解决方案

应用Eclipse自带的PropertySheet

热度:21   发布时间:2016-04-23 11:59:22.0
使用Eclipse自带的PropertySheet

在项目中遇到一些小问题,现在记录下来,备忘,也能帮助初学者。
???? 在自己的RCP应用中使用PropertySheet大概有两种方法,我现在只介绍一种方法。这种方法我觉得要简单一点。
???? 首先,自己定义的model要继承org.eclipse.ui.views.properties.IPropertySource接口,这个接口中有几个方法要实现:
???? 第一个:

Java代码
  1. ???????@Override??
  2. public?Object?getEditableValue()?{??
  3. ????//返回模型自身作为可编辑的属性??
  4. ????return?this;??
  5. }??
        @Override	public Object getEditableValue() {		//返回模型自身作为可编辑的属性		return this;	}


?????? 这个方法如代码中所示,返回model自身就可以了。
?????? 第二个:

Java代码
  1. @Override??
  2. ????public?IPropertyDescriptor[]?getPropertyDescriptors()?{??
  3. ??
  4. ????????IPropertyDescriptor[]?descriptors?=?new?IPropertyDescriptor[]?{???
  5. ????????????????new?TextPropertyDescriptor(P_TEXT,?"Name"),??
  6. ????????????????new?ComboBoxPropertyDescriptor(P_TYPE,?"Type",?new?String[]?{?"True""False"}),??
  7. ??????????????????
  8. ????????};??
  9. ????????return?descriptors;??
  10. ??
  11. ????}??
@Override  	public IPropertyDescriptor[] getPropertyDescriptors() {		IPropertyDescriptor[] descriptors = new IPropertyDescriptor[] { 				new TextPropertyDescriptor(P_TEXT, "Name"),				new ComboBoxPropertyDescriptor(P_TYPE, "Type", new String[] { "True","False"}),						};		return descriptors;	}


??????? 这个方法返回一个IPropertyDescriptor数组,它包括了在属性视图中要显示的项。
??????? 第三个:

Java代码
  1. @Override??
  2. ????public?Object?getPropertyValue(Object?id)?{??
  3. ????????if(id.equals(P_TEXT))?{??
  4. ??????????????
  5. ????????????return?this.getName();??
  6. ??????????????
  7. ????????}?else?if(id.equals(P_TYPE))?{??
  8. ??????????????
  9. ????????????return?this.getType().equals("Real")???new?Integer(0)?:?new?Integer(1);??
  10. ??????
  11. ????????}???
  12. ????????return?null;??
  13. ????}??
@Override	public Object getPropertyValue(Object id) {		if(id.equals(P_TEXT)) {						return this.getName();					} else if(id.equals(P_TYPE)) {						return this.getType().equals("Real") ? new Integer(0) : new Integer(1);			} 		return null;	}


?????? 在实现这个方法的时候要注意,在上面那个方法中的:

Java代码
  1. new?ComboBoxPropertyDescriptor(P_TYPE,?"Type",?new?String[]?{?"True""False"}),??
new ComboBoxPropertyDescriptor(P_TYPE, "Type", new String[] { "True","False"}),

所对应的在这个方法中的返回值是Integer的,而不是String,这一点一定要注意,要不然显示出来的属性视图是无法编辑的。
??????? 第四个:

Java代码
  1. ?????@Override??
  2. ublic?boolean?isPropertySet(Object?id)?{??
  3. return?true;??
       @Override	public boolean isPropertySet(Object id) {		return true;	}


???????? 这个方法返回true就可以了。
???????? 最后一个要我么实现的方法:

Java代码
  1. @Override??
  2. ????public?void?setPropertyValue(Object?id,?Object?value)?{??
  3. ??????????
  4. ????????if(id.equals(P_TEXT))?{??
  5. ??????????????
  6. ????????????this.setName(value.toString());??
  7. ??????????????
  8. ????????}?else?if(id.equals(P_TYPE))?{??
  9. ??????????????
  10. ????????????this.setType(((Integer)value).equals(new?Integer(0))???"Real"?:?"Integer");??
  11. ??????????????
  12. ????????}??
  13. ??????????
  14. ????}??
@Override	public void setPropertyValue(Object id, Object value) {				if(id.equals(P_TEXT)) {						this.setName(value.toString());					} else if(id.equals(P_TYPE)) {						this.setType(((Integer)value).equals(new Integer(0)) ? "Real" : "Integer");					}			}


????????? 这个方法中也要注意第三个方法中说道的问题,这时参数实际上对Type而言是Integer类型的,而不是String处理的时候要做以一下转换。
???????? 然后,就在Perspective中加入PropertySheet视图就可以了。PropertySheet的ID为:org.eclipse.ui.views.PropertySheet。
???????? 希望对初学者能有帮助,不妥的地方还请大家指出,偶也初学。

  相关解决方案