如果您正在创建要在 Visual Editor 中使用的新组件或 bean(例如,将组件添加到选用板中),则可以通过提供 BeanInfo 类来控制它们的行为。
BeanInfo 类实现 java.beans.BeanInfo,并由 Visual Editor 用来确定 bean 的属性视图的行为以及是否有定制程序可用。Visual Editor 包含公共 AWT 和 Swing 控件的 BeanInfo 类。
因为 BeanInfo 类包含仅在设计时需要的信息,所以它通常保存在与 bean 类本身不同的项目中并且在部署 bean 时不包括它。Visual Editor for Java 使用许多规则,这些规则允许您将 BeanInfo 类与它们所描述的 Java bean 相关联。如果您正在使用的 Java bean 具有要让 Visual Editor 检测的 BeanInfo 类,则需要了解这些规则。例如,如果正在使用一组第三方 Java bean 类,或者如果开发了正在使用的 Java bean 和 BeanInfo 类。
要了解有关 BeanInfo 类的更多信息,可以从以下站点下载 JavaBeans 规范:java.sun.com/products/javabeans/docs/。
java.beans.Introspector 类用来定位 Java bean 的 BeanInfo 类。发生此操作的时间称为自省,这是在第一次使用 bean 时由 Visual Editor 完成的。例如,当从选用板中第一次放下按钮时,将发生自省,它尝试定位正确的 BeanInfo 类。在对 bean 进行自省之后,将高速缓存结果以帮助提高性能。然而,当 Visual Editor 检测到 BeanInfo 类可能已更改并且高速缓存为旧文件时,自省将重新发生。
bean 的自省是通过将 bean 类作为自变量来调用 getBeanInfo(Class) 静态方法完成的。例如:
java.beans.Introspector.getBeanInfo(MyJavaBean.class)
自省程序使用下列逻辑来为自变量类 MyJavaBean 定位 BeanInfo 类。这涉及许多按顺序执行的步骤,并且在任何步骤成功之后,自省程序都会停止查找。如果任何步骤失败,则将使用下一个步骤来尝试使用另一种方法定位 bean 信息。
如果找到了该类的 BeanInfo 类,则自省程序不会显式地返回它。而是使用它的详细信息来创建实现 java.beans.BeanInfo 的临时结果类。
了解 BeanInfo 路径的最好办法是考虑创建用来执行自省的 Java 虚拟机。对此虚拟机给定了由下列条目组成的类路径:
创建了虚拟机之后,java.beans.Introspector 使用方法 public void setSearchPath(String[]) 来设置要搜索 BeanInfo 类的包列表。
此方法的自变量有:
如果正在编写的 bean 从超类继承属性,则缺省 BeanInfo 不会显示固有属性。必须用 getAdditionalBeanInfo() 方法显式地显示它们。
例如:
public BeanInfo[] getAdditionalBeanInfo() { try { // The following will return all inherited features. return new BeanInfo[] { Introspector.getBeanInfo(MyPanel.class.getSuperclass())}; } catch (IntrospectionException e) { return new BeanInfo[0]; }
如果未显示固有属性,则 Visual Editor 不会呈示它,即使在源代码中设置了它也如此。
JRE 类的 BeanInfo 类
包括在 JRE 中的类的 Java bean 是作为 Visual Editor for Java 的部件提供的。这些 Java bean 定义一些类(如工作台中的 javax.swing.JButton 或 javax.swing.JFrame)的行为。有关编写 Visual Editor 的 BeanInfo 类的技巧
本节描述在编写要在 Visual Editor for Java 中使用的 Java bean 的 BeanInfo 类时您可以使用的一些规则。为插件开发者控制 BeanInfo 信息
可以通过在插件清单文件中添加条目来练习对 BeanInfo 类与类路径变量相关联的方式进行控制。