Bean Customization
自定义提供了一种在应用程序构建器中修改 Bean 的外观和行为的方式,从而可以满足您的特定需求。 Bean 开发人员可以使用多种定制级别,以使其他开发人员从 Bean 的潜在功能中获得最大的收益。
以下链接对于了解属性编辑器和定制器很有用:
-
PropertyEditor interface
-
PropertyEditorSupport class
-
PropertyEditorManager class
-
Customizer interface
-
BeanInfo interface
可以在设计时使用符合 Bean 的构建器工具自定义 Bean 的外观和行为。定制 bean 有两种方法:
-
通过使用属性编辑器。每个 bean 属性都有其自己的属性编辑器。 NetBeans GUI 构建器通常在“属性”窗口中显示 bean 的属性编辑器。与特定属性类型关联的属性编辑器可编辑该属性类型。
-
通过使用* customizers *。定制程序使您可以对 Bean 定制进行完全的 GUI 控制。如果属性编辑器不实用或不适用,则使用定制程序。与与属性关联的属性编辑器不同,定制器与 Bean 关联。
Property Editors
属性编辑器是用于自定义特定属性类型的工具。在“属性”窗口中激活属性编辑器。该窗口确定属性的类型,搜索相关的属性编辑器,并以相关的方式显示属性的当前值。
属性编辑器必须实现PropertyEditor
interface,该interface提供用于指定应如何在属性表中显示属性的方法。下图表示包含myBean1
个属性的“属性”窗口:
您可以通过单击属性条目来开始编辑这些属性的过程。单击大多数这些条目将弹出单独的面板。例如,要设置foreground
或background
,请使用带有颜色选择的选择框,或按“ ...”按钮以使用标准的 ColorEditor 窗口。单击toolTipText
属性将打开一个 StringEditor 窗口。
支持类PropertyEditorSupport
提供了PropertyEditor
interface的默认实现。通过从PropertyEditorSupport
继承属性编辑器,您可以简单地覆盖所需的方法。
要在“属性”窗口中显示当前属性值“samples”,您需要覆盖isPaintable
以返回true
。然后,您必须覆盖paintValue
才能在属性表的矩形中绘制当前属性值。 ColorEditor
实现paintValue
的方法如下:
public void paintValue(java.awt.Graphics gfx, java.awt.Rectangle box) {
Color oldColor = gfx.getColor();
gfx.setColor(Color.black);
gfx.drawRect(box.x, box.y, box.width-3, box.height-3);
gfx.setColor(color);
gfx.fillRect(box.x+1, box.y+1, box.width-4, box.height-4);
gfx.setColor(oldColor);
}
若要支持自定义属性编辑器,请重写另外两个方法。覆盖supportsCustomEditor
返回 true,然后覆盖getCustomEditor
返回自定义编辑器实例。 ColorEditor.getCustomEditor
返回this
。
此外,PropertyEditorSupport
类维护PropertyChangeListener
列表,并在更改绑定属性时向那些侦听器触发属性更改事件通知。
如何将属性编辑器与属性相关联
通过以下方式发现属性编辑器并将其与给定属性相关联:
- 通过
BeanInfo
对象的显式关联。标题属性的编辑器使用以下代码行设置:
pd.setPropertyEditorClass(TitleEditor.class);
-
通过
java.beans.PropertyEditorManager.registerEditor
方法显式注册。此方法有两个参数:bean 类类型和与该类型关联的编辑器类。 -
名称搜索。如果一个类没有显式关联的属性编辑器,则
PropertyEditorManager
通过以下方式搜索该类的属性编辑器: -
在完全限定的类名称后附加“编辑器”。例如,对于
my.package.ComplexNumber
类,属性编辑器 管理 器将搜索my.package.ComplexNumberEditor
类。- 在类名称后附加“编辑器”并搜索 Classpath。
Customizers
您已经了解到,构建器工具为您创建自己的属性编辑器提供了支持。对于复杂的,具有工业强度的咖啡 bean,视觉构建者还应满足哪些其他需求?通常不希望在单个(有时是巨大的)属性表上显示 bean 的所有属性。如果关于 bean 类型的单一根选择导致一半的属性无关紧要怎么办? JavaBeans 规范提供了用户定义的定制程序,通过它可以为 bean 属性定义比属性编辑器更高级别的定制。
使用 bean Customizer 时,可以完全控制如何配置或编辑 bean。定制程序是专门针对 Bean 定制的应用程序。有时,属性不足以表示 Bean 的可配置属性。在需要复杂的指令来更改 Bean 的情况下,以及在属性编辑器过于原始而无法实现 Bean 定制的情况下,都使用定制程序。
所有定制程序必须:
-
扩展
java.awt.Component
或其子类之一。 -
实现
java.beans.Customizer
interface这意味着实现注册PropertyChangeListener
对象的方法,并在对目标 bean 进行更改时在那些侦听器中触发属性更改事件。 -
实现默认的构造函数。
-
通过
BeanInfo.getBeanDescriptor
将定制器与其目标类相关联。