可以采用不同的样式或方式来编写 Java 代码。Visual Editor 对其生成的 Java 代码使用特定的样式。
Visual Editor for Java 生成能够正常编译和运行的有效 Java 代码。另外,当 Visual Editor 解析现有的 Java 代码时,它使用规则来确定哪些代码元素要尝试在“设计”视图中进行可视化。
可解析代码的规则
如果代码符合下列任何条件,则 Visual Editor for Java 将尝试在“设计”视图中将该代码可视化:
在图形“设计”视图上可视化某个组件之前,Visual Editor 还检查其它需求:
- 必须在 get 方法中将字段实例化,否则,bean 必须由 Visual Editor“首选项”页的“模式样式”选项卡上列示的初始化方法进行初始化。注意,在下图中,jbInit、initComponents 和 initialize 方法被指定为初始化方法:
- 行上一定不能存在编译错误
- 类对于装入和实例化操作必须是有效的
- 不能对大多数数组初始化表达式求值
- 将不对涉及使用 + 操作数的算术或字符串并置的表达式求值
大多数表达式被成功解析,但并不是所有表达式都可以正确求值。在这种情况下,将在视图中针对 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 createFoo() 方法,并且任何子 bean 都是在同一个方法中初始化的。
- 如果已编辑的类继承了 Java bean,则正在编辑的实例将以名为“this”部件的特殊 Java bean 来表示。不能从“设计”视图或 Java Bean 视图中删除“this”部件,其属性的初始化方法将在 initialize() 方法中完成。仅当有任何可以在“属性”视图中设置的属性时,“this”部件才会显示在“设计”视图和 Java Bean 视图中。属性的 set 方法是在 initialize() 方法中生成的,或者,如果该类继承了 java.awt.Applet,则将使用 init() 方法。