文档

Java™ 教程-Java Tutorials 中文版
Bean 自定义
Trail: JavaBeans(TM)
Lesson: Advanced JavaBeans Topics

Bean 自定义

Customization (自定义) 提供了一种在应用程序构建器中修改 bean 的外观和行为的方法,以满足你的特定需求。bean 开发人员可以使用多个级别的自定义,以允许其他开发人员从 bean 的潜在功能中获得最大收益。


以下链接对于了解属性编辑器和定制器非常有用:


可以在符合 Bean 的构建器工具中的设计时自定义 bean 的外观和行为。有两种方法可以自定义 bean:

属性编辑器

属性编辑器是用于自定义特定属性类型的工具。属性编辑器在“属性”窗口中激活。此窗口确定属性的类型,搜索相关的属性编辑器,并以相关方式显示属性的当前值。

属性编辑器必须实现 PropertyEditor 接口,该接口提供了指定属性如何在属性表中显示的方法。下图表示包含 myBean1 属性的“属性”窗口:

此图表示“属性”窗口中的 myBean1 属性

你可以通过单击属性条目开始编辑这些属性的过程。单击大多数这些条目将显示单独的面板。例如,要设置 foregroundbackground,请使用带有颜色选择的选择框,或按“...”按钮以使用标准 ColorEditor 窗口。单击 toolTipText 属性将打开 StringEditor 窗口。

支持类 PropertyEditorSupport 提供 PropertyEditor 接口的默认实现。通过从 PropertyEditorSupport 继承属性编辑器,你可以简单地覆盖所需的方法。

要在“属性”窗口中显示当前属性值“sample”,需要覆盖 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 列表,并在更改绑定属性时向这些监听器触发属性更改事件通知。

属性编辑器如何与属性关联

通过以下方式发现属性编辑器并将其与给定属性相关联:

自定义

你了解到构建器工具为你提供了创建自己的属性编辑器的支持。对于复杂的工业强度的 bean,可视化构建器还应该满足哪些其他需求?通常不希望在单个(有时是巨大的)属性表上显示 bean 的所有属性。如果关于 bean 类型的一个单一根选择使得一半属性无关紧要怎么办?JavaBeans 规范提供了用户定义的定制器,通过它可以为 bean 属性定义比属性编辑器更高级别的定制。

使用 bean Customizer 时,你可以完全控制如何配置或编辑 bean。Customizer 是专门针对 bean 定制的应用程序。有时属性不足以表示 bean 的可配置属性。定制器用于需要复杂指令来更改 bean,以及属性编辑器过于基本而无法实现 bean 定制的情况。

所有定制者必须:


Previous page: Long Term Persistence
Next page: End of Trail