JavaBean

JavaBean

概念

JavaBean可以看成是一种编程约定,按照这种约定编写Java类,开发者之间就易于协作,而且代码也易于重用,并且有一些开发工具也能够识别JavaBean所定义的各种属性、方法和事件。

特点

  1. 这个类必须具有一个无参的构造函数
  2. 属性必须私有化
  3. 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

编写JavaBean

定义JavaBean属性

JavaBean属性 = 私有字段 + get方法 + set方法

private int field1;
private boolean field2;

public int getField1() {
	return field1;
}
public void setField2(int field1) {
	this.field1 = filed1
}
// boolean 类型的字段,其get方法格式为:isFieldName()
public boolean isField2() {
	return field2;
}
public void setField2(boolean field2) {
	this.field2 = field2;
}
// 只读属性没有set方法 ,只写属性没有get方法

索引属性:

private int[] lists;  

public int[] getLists() {
    return lists;
}
public void setLists(int[] lists) {
    this.lists = lists;
}

public int getLists(int index) {
    return lists[index];
}
public int setLists(int index, int value) {
    lists[index] = value;
}

可绑定的属性:

为javaBean定义好一个可绑定的属性之后,就可以给它添加外部的监听器(即Listener),当属性发生改变就会得到通知。

java.beans包中包含了两个类型:PropertyChangeEvent和PropertyChangeListener。可以调用addPropertyChangeListener和removePropertyListener这两方法来为可绑定JavaBean属性添加或移除监听对象,当属性值发生变化时,JavaBean会触发一个PropertyChangeEvent事件,并通知所有注册的PropertyChangeListener。

java.beans包中还有一个PropertyChangeSupport类,使用它可以很方便地管理监听器对象,并且在需要时能随时触发事件

private String bindField = "hello";
// 用于触发事件
private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

public String getBindField() {
    return bindField;
}
public void setBindField(String bindField) {
    String oldBindField = this.bindField;
    this.bindField = bindField;
    // 触发"属性值变更"事件
    listeners.firePropertyChange("bindField",oldBindField,bindField);
}
// 添加和移除属性改变事件监听器
public void addPropertyChangeListener(PropertyChangeListener listener) {
    listeners.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
    listeners.removePropertyChangeListener(listener);
}
// 测试
public static void main(String[] args) {
        BeanListener bl = new BeanListener();
        bl.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                String info = String.format("Propty: %s,Old Value:%s, new Value:%s",evt.getPropertyName(),evt.getOldValue().toString(),evt.getNewValue().toString());
                System.out.println(info);
            }
        });
        bl.steBindField("word");
        bl.steBindField("nihaoa")
    }

约束属性

约束属性时绑定属性的一种,你可以为约束属性添加一个或多个有"投票权"的监听器,当属性转字将要改变时,由这些监听器对象投票决定是否要这个值改变。如果监听器不同意这个值改变时,则应该抛出PropertyVetoException。在实际开发中,通常使用java.beans包中的VetoableChangeSupport 类来实现约束属性。

private int score = 9;
private VetoableChangeSupport vetoListeners = new VetoableChangeSupport(this);
public int getScore() {
	return score;
 }

public void setScore(int score) throws PropertyVetoException {
    int oldScore = this.score;
    // 通知"投票监听器" 进行投票,不同意这抛出PropertyVetoException异常
    vetoListeners.fireVetoableChange("score", oldScore, score);
    this.score = score;
}
// 添加和删除“投票监听器”
public void addVetoableChageListener(VetoableChangeListener listener) {
    vetoListeners.addVetoableChangeListener(listener);
}
public void removeVetoableChangeListener(VetoableChangeListener listener) {
    vetoListeners.removeVetoableChangeListener(listener);
}
// 注意 同一个属性,可以同时注册PropertyChangeListener和VetoableChangeListener,在触发事件时,注意要把后者放到前面,仅当值的改变“通过投票”后,才真正改变值并触发PropertyChange事件。
// 测试
// 添加一个成绩有效性的监听器
ConstrainsBean cb =  new ConstrainsBean();
cb.addVetoableChageListener(new VetoableChangeListener() {
    @Override
    public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
        int newValue = Integer.parseInt(evt.getNewValue().toString());
        String propertyName = evt.getPropertyName();
        if (propertyName.equals("score") && (newValue < 0 || newValue >100)) {
            throw new PropertyVetoException("有效成绩在0-100分之间",evt);
        }
    }
});
try{
    cb.setScore(100);
    System.out.println(cb.getScore());
}catch (PropertyVetoException e) {
    e.printStackTrace();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值