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
iBean属性的类型如下:
–简单(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