i
遵循下面给出的步骤自己编码建立
Bean
:
–
编写一个简单的
Bean
例:
import java.awt.*;
import java.io.Serializable;
public class CustomBean extends Canvas
implements Serializable {
public CustomBean() {
…} }
–
建立一个清单文件,名为manifest.tmp
例:
Name: CustomBean.class
Java-Bean: True
–
建立Jar文件,包含清单文件和CustomBean
.class
文件
例:
jar cfm CustomBean.jar manifest.tmp CustomBean.class
i
Bean
属性的类型如下:
–
简单
(simple)
属性:
解释怎样把属性赋予
Bean
–
关联
(bound)
属性:当该种属性的值发生变化时,要通知其它的对象
–
受限
(Constrained)
属性:当这个属性的值要发生变化时,与这个属性已建
立了某种连接的其它
Java
对象可否决属性值的改变
–
索引
(indexed)
属性
:描述多值的属性,用一个数组表示
i
代表
Bean
的外观和行为,能在设计时被改变
i
能通过遵循设计模式
的
getter
和
setter
方法访问的私有的值
i
开发工具利用基于设计模式的方法名称能够:
–
找出Bean的属性
–
确定属性的读与写特性
–
确定属性的类型
–
为每一属性类型定位一个适当的属性编辑器
–
显示属性(通常通过属性表单)
–
改变属性(设计时)
i
一个构造工具,通过自省你的
Bean
,发现两种方法:
public Color getColor() {
return color;
}
public void setColor(Color c) {
color = newColor;
repaint(); }
i
构造工具推断名为
“
color
”
的属性存在,它能读能写,其数据类型是
Color
private Color color = Color.
red
;
i
构造工具能试图为该类型定位一个属性编辑器(在这个例子中是一个颜色编
辑器,可供用户调整颜色),并显示属性,这样它能被编辑
i
只要一种关联属性变化,变化的通知会发送到感兴趣的监听者
–
包含关联属性的
Bean
必须维持属性变化监听者的一张列表,而当关联属
性变化时,警告那些监听者
–
PropertyChangeSupport
类实现了从一张列表中增加和删除
PropertyChangeListener
对象的方法
–
监听者需要实现
PropertyChangeListener
接口及其
propertyChange
方法
,并
被添加到关联属性
Bean
保持的列表中
–
PropertyChangeEvent
类封装了属性变化信息。通过
propertyChange
方法,
它从属性变化事件来源被发送到每一属性变化监听者列表中的对象
i
遵循下面的步骤在
Bean
中实现关联属性支持:
–
import java.beans
包,提供了
PropertyChangeSupport
类
–
实例化
PropertyChangeSupport
对象:
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
该对象保持属性变化监听者列表,点火属性变化事件
–
实现
保持属性变化监听者列表的方法。因
PropertyChangeSupport
实现了这些方
法,只需要将调用
PropertyChangeSupport
对象的方法打包:
public void addPropertyChangeListener(PropertyChangeListener
l
) {
changes.addPropertyChangeListener(l); }
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);}
–
当属性被改变时,修改一种属性的
setter
方法点火属性变化事件。假设
CustomBean
有一个名
为
color
的颜色属性,它
的
setColor ( )
方法看起来象这样:
public void setColor(Color newColor){
Color oldColor = color;
color = newColor;
changes.firePropertyChange("color",oldColor, newColor);
/*
一旦属性变化,上述
方法将把它的传入参数包含在
PropertyChangeEvent
对象中,在每一个注册了的监听者上调用
propertyChange(PropertyChangeEvent pce)
方法
*/
repaint();
}
转载于:https://blog.51cto.com/ndebyq/51557