当您设计可视类时,Visual Editor 将生成并解析 Java 代码。Visual Editor 对其生成的 Java 代码使用特定的样式,并且,它使用一些规则来解析 Java 代码。
Visual Editor for Java 生成能够正常编译和运行的有效 Java 代码。另外,当 Visual Editor 解析现有的 Java 代码时,它使用规则来确定哪些代码元素要尝试在“设计”视图中进行可视化。
要在“设计”视图中显示的代码的解析规则
如果代码符合下列
任何条件,则 Visual Editor for Java 将尝试在“设计”视图中将该代码可视化:
在图形“设计”视图上可视化某个组件之前,Visual Editor 还检查其他要求:
- 必须在 get 方法中将字段实例化,否则,bean 必须由 Visual Editor“首选项”页的“模式样式”选项卡上列示的初始化方法进行初始化。
- 行上一定不能存在编译错误
- 类对于装入和实例化操作必须是有效的。
- 不能对大多数数组初始化表达式求值。
- 对于方法的复杂参数来说,只要构成该参数的实体已被建模,就可以理解该参数。例如,在大多数情况下,可以正确地对涉及使用 + 操作数的字符串并置的表达式进行求值。
大多数表达式被成功解析,但并不是所有表达式都可以正确求值。在这种情况下,将在视图中针对 Java bean 显示警告标记,在“设计”视图或 Java Bean 视图中选择该 bean 时,将在状态行中显示失败的原因。还将在画布上显示一个警告图标:

Visual Editor 生成的代码
- Visual Editor 生成调用方法 initialize() 的缺省构造函数,该方法设置类的属性值。
- 对于 applet,设置初始属性值的代码名为 init()。构造函数不调用此代码,这是因为 applet 浏览器本身将执行此代码。
- 可选:可以指定 Visual Editor 为组件生成 try{}catch() 块。这将连续不断地捕获初始化期间抛出的每个异常,并且异常被抑制的风险也会增加。因此,最好是改为让异常通过。可以在 Visual Editor 首选项()的“代码生成”选项卡上选择此选项。以下代码显示使用 try{}catch() 块初始化的 JPanel:
private JPanel getJPanel1() {
if (jPanel1 == null) {
try {
jPanel1 = new JPanel();
}
catch (java.lang.Throwable e) {
// TODO: Something
}
}
return jPanel1;
}
以下代码显示不带 try{}catch() 代码块的 JPanel:
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
}
return jPanel;
}
- 可选:还可以指定 Visual Editor 添加注释来标记它所生成的每个表达式。这有助于区分手工编写的代码与生成的代码。以下代码行是注释的一个示例:
this.add(getJPanel(), null); // Generated
要打开此选项,请在 Visual Editor 首选项的“代码生成”选项卡上选择为新表达式生成注释复选框。
- 对于 Swing/AWT 来说,尽管 Visual Editor 生成诸如 getPanel()
之类的方法,这些方法对单个 Java bean
进行实例化并返回它,但这不是必需的。一个方法可以将多个
Java bean 实例化,并且方法的返回值对于识别字段是否为
Java bean 来说并不重要。要将字段 anOKButton 和
ivjTableModel 作为 Java bean
包括,就需要在类的 get 方法中对它们进行实例化。
- 对于 SWT 来说,Visual Editor 为每个扩展 Composite 的类生成 private void createComposite() 方法,并且任何子 bean 都是在同一个方法中初始化的。
- 如果已编辑的类扩展了 Java bean,则正在编辑的实例将以名为“this”部件的特殊 Java bean 来表示。不能从“设计”视图或 Java Bean 视图中删除“this”部件,其属性的初始化方法将在 initialize() 方法中完成。仅当有任何可以在“属性”视图中设置的属性时,“this”部件才会显示在“设计”视图和 Java Bean 视图中。属性的 set 方法是在 initialize() 方法中生成的,或者,如果该类扩展了 java.awt.Applet,则将使用 init() 方法。
- 如果编辑的类实现了 org.eclipse.ui.IWorkbenchPart,则为子控件生成的代码将被添加到 createPartControl(Composite parent) 方法中。