Indexed属性
一个Indexed类型的JavaBeans属性表示一个数组值。使用与该属性相对应的setXXX()和getXXX()放可以存取数组中某个元素的数值。同时,我们也可以使用另两个同名方法一次设置或取得整个数组的值(即属性的值)。
public class JavaBean2
{
int[] dataSet={1,2,3,4,5,6};
public void JavaBean2(){
}
public void setDataSet(int[] x){
dataSet=x;
}
public void setDataSet(int index,int x){
dataSet[index]=x;
}
public int[] getDataSet(){
return dataSet;
}
public int getDataSet(int x){
return dataSet[x];
}}
Bound属性
一个Bound类型的JavaBean组件的属性具有这样的特性:当该中属性的值发生变化,必须通知其它JavaBeans组件的对象,每次JavaBeans组件对象的属性值改变时,这种属性就引发一个PropertyChange事件(在java程序中,事件也被看作是一个对象)。这个事件中封装了发生属性改变事件的属性名、属性的原值、属性变化后的新值。这个事件将被传递到其它的JavaBeans组件中,至于接受事件的JavaBean组件对象应该作什么动作由其自己定义。
import java.beans.*;
public class JavaBean3{
String ourString="Hello";
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
public void setString(String newString){
String oldString=ourString;
ourString=newString;
changes.firePropertyChange("ourString",oldString,newString);
}
public String getString(){
return ourString;
}
public void addPropertyChangeListener(PropertyChangeListener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}}
PropertyChangeSupport类型的对象changes主要用于向监听者对象发送信息(当JavaBean对象已经发生了属性改变的事件)。changes对象的firePropertyChange()方法,通知监听者队列的所有事件监听对象。
Contrained属性
JavaBeans组件的Constrained类型的属性具有这样的性质:当这个属性的值将要发生变化但还没有发生变化的时候,与这个属性已经机那里了某种监听关系的其它Java对象可以否决属性值的改变。此Constrained类型的属性的事件监听者对象将会通过抛出PropertyVetoException异常事件来阻止该属性值的改变。
import java.beans.*;
public class JavaBean4{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport vetos=new VetoableChangeSupport(this);
int outPriceInCents;
public void setPriceInCents(int newPriceInCents)throws PropertyVetoException{
int oldPriceInCents=ourPriceInCents;
vetos.fireVetoableChange("priceInCents",new Integer(oldPriceInCents),new Integer(newPriceInCents));
ourPriceInCents=newPriceInCents;
changes.firePropertyChange("priceInCents",new Integer(oldPriceInCents),new Integer(newPriceInCents));
}
public void addVetoableChangeListener(VetoableChangeListener l){
vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
public void addPropertyChangeListener(PropertyChangeListener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}}
VetoableChangeSupport类型的对象vetos主要用于通知事件否决对象,某个JavaBean对象的属性值将要发生变化,让它们投票决定是否允许这个事件的发生。