文档

Java™ 教程
隐藏目录
Bean 自定义
路径: JavaBeans(TM)
课程:高级JavaBeans主题

Bean定制

自定义提供了一种修改bean在应用程序构建器中外观和行为的方式,以满足您的特定需求。有几个级别的自定义可供bean开发人员使用,以使其他开发人员从bean的潜在功能中获得最大的利益。


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


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

属性编辑器

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

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

这个图示了属性窗口中的myBean1属性

您可以通过点击属性条目来开始编辑这些属性。点击大多数条目将会弹出单独的面板。例如,要设置foregroundbackground,可以使用带有颜色选择的选择框,或者按下“…”按钮来使用标准的ColorEditor窗口。点击toolTipText属性将会打开一个StringEditor窗口。

支持类PropertyEditorSupport提供了PropertyEditor接口的默认实现。通过从PropertyEditorSupport派生您的属性编辑器,您可以简单地重写所需的方法。

要在属性窗口中显示当前属性值“示例”,需要重写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属性定义比属性编辑器更高级别的定制。

当您使用一个自定义器(Customizer)时,您完全控制如何配置或编辑一个bean。自定义器是一个专门针对bean定制的应用程序。有时,属性不足以表示一个bean的可配置属性。当需要复杂的指令来更改一个bean,并且属性编辑器过于简单以实现bean的定制时,就会使用自定义器。

所有自定义器必须满足以下条件:


上一页: 长期持久性
下一页: 尾页