Module java.desktop
Package java.beans
package java.beans
包含与开发基于JavaBeans架构的组件 - 组件相关的类。一些类在组件运行时由组件使用。例如,事件类被用于触发属性和可否决更改事件的组件(请参阅
PropertyChangeEvent
)。然而,此包中的大多数类是为组件编辑器(即,用于定制和组合组件以创建应用程序的开发环境)而设计的。特别是,这些类帮助组件编辑器创建用户界面,用户可以使用该界面来定制组件。例如,一个组件可能包含一个特殊类型的属性,组件编辑器可能不知道如何处理。通过使用PropertyEditor
接口,组件开发人员可以为这种特殊类型提供编辑器。
为了最大限度地减少组件使用的资源,组件编辑器使用的类仅在编辑组件时加载。它们在组件在应用程序中运行时不需要,因此不会加载。这些信息保存在所谓的bean-info中(请参阅BeanInfo
)。
除非明确说明,否则null值或空字符串不是此包中方法的有效参数。如果使用这些参数,您可能会看到异常。
长期持久性
从v1.4开始,java.beans
包提供了对长期持久性的支持 - 将组件读取和写入为其属性值的文本表示。属性值被视为组件,并且递归地读取或写入以捕获其公开可用状态。这种方法适用于长期存储,因为它仅依赖于公共API,而不依赖于可能会更改的私有实现。
注意:持久性方案无法自动实例化自定义内部类,例如您可能用于事件处理程序的类。通过使用EventHandler
类而不是内部类作为自定义事件处理程序,您可以避免此问题。
您可以使用XMLDecoder
和XMLEncoder
类以XML格式读取和写入组件,分别。持久性方案的一个显着特点是读取组件不需要对组件有特殊了解。
另一方面,写出组件有时需要对组件的类型有特殊了解。如果组件的状态可以仅使用无参数构造函数和公共getter和setter方法来表示,则不需要特殊了解。否则,组件需要一个自定义的持久性代理 - 负责写出特定类型组件的对象。从java.awt.Component
继承的所有JDK提供的类以及它们的所有属性都自动具有持久性代理。
如果您需要(或选择)为组件提供持久性代理,可以使用DefaultPersistenceDelegate
实例或创建PersistenceDelegate
的子类来实现。如果组件需要持久性代理的唯一原因是因为您希望使用属性值调用组件的构造函数,可以使用带有一个参数的DefaultPersistenceDelegate
构造函数创建组件的持久性代理。否则,您需要实现自己的持久性代理,这可能需要以下类:
-
PersistenceDelegate
-
所有持久性代理都从此抽象类继承。您的子类应根据对组件类型的了解提供创建组件和恢复其状态所需的任何
Statement
和Expression
。 -
Statement
- 表示在对象上调用单个方法的原语语句。包括方法的一组参数。
-
Expression
-
用于返回值的方法的
Statement
子类。
创建持久性代理后,您可以使用XMLEncoder
的setPersistenceDelegate
方法进行注册。
相关文档
有关概述、架构和教程文档,请参阅:-
ClassDescriptionDeprecated, for removal: This API element is subject to removal in a future version.The Applet API is deprecated.BeanDescriptor提供有关“bean”的全局信息,包括其Java类、显示名称等。使用
BeanInfo
接口创建一个BeanInfo
类,并提供有关bean的方法、属性、事件和其他特性的显式信息。用于为自动生成的BeanInfo
类指定一些与属性相关的信息的注释。此类提供一些通用的组件控制方法。用于指定构造函数的注释,显示该构造函数的参数如何与构造的对象的getter方法对应。自定义器类为定制目标Java Bean的完整自定义GUI提供支持。DefaultPersistenceDelegate
是抽象PersistenceDelegate
类的具体实现,是默认用于没有可用信息的类的代理。此接口旨在由java.beans.beancontext.BeanContext的实例或委托实现,以便将当前“designTime”属性传播到其嵌套的java.beans.beancontext.BeanContextChild实例的层次结构中。Encoder
是一个可以用于根据其公共API对JavaBeans集合的状态进行编码的文件或流的类。EventHandler
类提供支持动态生成事件监听器,其方法执行涉及传入事件对象和目标对象的简单语句。EventSetDescriptor描述给定Java bean触发的一组事件。ExceptionListener会收到内部异常的通知。Expression
对象表示一个原始表达式,其中一个方法应用于目标和一组参数以返回结果 - 如"a.getFoo()"
。FeatureDescriptor类是PropertyDescriptor、EventSetDescriptor和MethodDescriptor等的公共基类。每当符合JavaBeans规范(“bean”)的组件更改绑定的索引属性时,都会传递“IndexedPropertyChange”事件。IndexedPropertyDescriptor描述类似数组的属性,并具有用于访问数组特定元素的索引读取和/或索引写入方法。在内省期间发生异常时抛出。Introspector类提供了工具了解目标Java Bean支持的属性、事件和方法的标准方法。用于为自动生成的BeanInfo
类指定一些与类相关的信息的注释。MethodDescriptor描述Java Bean支持的特定方法。ParameterDescriptor类允许bean实现者提供有关每个参数的附加信息,超出java.lang.reflect.Method类提供的低级类型信息。PersistenceDelegate类负责根据类的公共API中的方法来表达给定类的实例的状态。每当bean更改“绑定”或“约束”属性时,都会传递“PropertyChange”事件。每当bean更改“绑定”属性时,都会触发“PropertyChange”事件。一个扩展EventListenerProxy
的类,专门用于为具有“绑定”属性的PropertyChangeListener
添加。这是一个实用类,可供支持绑定属性的bean使用。PropertyDescriptor描述Java Bean通过一对访问器方法导出的一个属性。PropertyEditor类为希望允许用户编辑给定类型的属性值的GUI提供支持。PropertyEditorManager可用于查找任何给定类型名称的属性编辑器。这是一个支持类,可帮助构建属性编辑器。当属性的建议更改表示不可接受的值时,会抛出PropertyVetoException。这是一个支持类,可使人们更容易提供BeanInfo类。Statement
对象表示一个原始语句,其中一个方法应用于目标和一组参数 - 如"a.setFoo(b)"
。每当bean更改“约束”属性时,都会触发VetoableChange事件。一个扩展EventListenerProxy
的类,专门用于为具有“约束”属性的VetoableChangeListener
添加。这是一个实用类,可供支持约束属性的bean使用。在某些情况下,bean可能在没有GUI的服务器上运行。XMLDecoder
类用于读取使用XMLEncoder
创建的XML文档,使用方式与ObjectInputStream
类似。XMLEncoder
类是ObjectOutputStream
的一种补充替代方案,可用于生成JavaBean的文本表示,就像ObjectOutputStream
用于创建Serializable
对象的二进制表示一样。