扩展Visual Editor的控件和属性

http://tech.ddvip.com   2008年01月10日    社区交流

内容摘要:Visual Editor for Java 是基于 eclipse 的 GUI 可视化编辑插件,该插件以 Java 代码为中心,实现了所见即所得的用户界面编辑方式,广泛支持目前的 SWT、AWT、Swing 等控件包。本文通过一个完整的对 Visual Editor 的扩展示例,向读者展示扩展 Visual Editor 的控件和属性的方法。

  cellEditorClassname 一项,指向了定制化后的编辑器类,该属性的值,分割线“/”前为该编辑器所在插件的 id,分割线后为该编辑器的类路径。

  通过上述几步操作,即可以用定制化的编辑器行为覆盖掉 BeanInfo 中缺省的编辑器行为,实现了对属性编辑的自由扩展。

  属性编辑器与 Java 代码的同步

  属性编辑器与 Java 代码有同步的需求,即可以将已经生成的 Java 代码进行解析,将解析的结果赋给打开后的属性编辑器显示,同时又需要对用户在属性编辑器中输入的信息进行解析,并生成 Java 代码。这两个是互逆的过程。

  Visual Editor 的核心部分,是描述被编辑控件的EMF模型,该模型描述了控件实例,控件之间的各种关系,以及可对控件进行编辑操作的各种属性等内容。该模型的实例实现了 org.eclipse.jem.internal.instantiation.base.IJavaInstance 接口。也就是所,上述的解析 Java 代码的过程,可以转化为解析 IJavaInstance 对象的过程;而生成 Java 代码的过程,也就是生成 IJavaInstance 对象的过程。

  如何解析 IJavaInstance 对象?对于本例来讲,下面是解析的一个片段,可以看到,对 IJavaObjectInstance 对象的解析,就是对其主体构造函数的解析,因为 set 和 get 方法对该属性操作,会创建一个该属性对象对应的实例,该创建就是通过构造函数。解析出该构造函数,就可以还原该对象的内容。getArguments() 方法,就是获取该构造函数传入的参数,由这些参数,最终还原出该对象。

  清单 7:解析 IJavaObjectInstance 对象

JavaAllocation allocation = ((IJavaObjectInstance) getValue()).getAllocation();
  PTExpression exp = ((ParseTreeAllocation) allocation).getExpression();
  PTClassInstanceCreation instance = ((PTClassInstanceCreation) exp);
  PTStringLiteral stringLiteral = (PTStringLiteral) instance.getArguments().get(0);
  String title = stringLiteral.getLiteralValue();
  PTNumberLiteral numberLiteral = (PTNumberLiteral) instance.getArguments().get(1);
  int max = Integer.parseInt(numberLiteral.getToken());
  model = new TextItemModel(title, max);

来源:ibm    作者:王 浩    责编:豆豆技术应用

正在加载评论...