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能通过遵循设计模式gettersetter方法访问的私有的值
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();}