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(); }