使用PropertyChangeSupport监控变量
作者:Legend
QQ:158067568
这两天在写毕设,遇到了这个一种情况,我的程序中有一个两个状态,我用一个boolean变量来表示着两种状态。这两种状态经常会变化,而且每次变化都会有很多其他的操作。如果每次状态变化时都表用一次变化的代码,万一修改起来就十分头大。JAVA中使用JAVABEAN来解决这类问题。
JAVA BEAN 关联属性
在JavaBean的设计中,按照属性的不同作用又细分为四类:单值属性、索引属性、关联属性、限制属性。关联属性,也称之为绑定属性。绑定属性会在属性值发生变化时,通知所有相关的监听器。
将属性变量单独封装到一个java类中,然后使用java.bean.PropertyChangeSupport类来监控变量,参考如下代码:
package cn.edu.heut.zcl.bean;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class BeanTest {
private boolean property;
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
this);
public void setProperty(boolean newValue) {
boolean oldValue = property;
property = newValue;
changeSupport.firePropertyChange("property", oldValue, newValue);
}
public void addPropertyChangeListener(PropertyChangeListener l) {
changeSupport.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
changeSupport.removePropertyChangeListener(l);
}
}
首先用自己定义的类实例化PropertyChangeSupport变量,然后为其注册添加和删除的监听器。每次要监听的值改变时,就调用firePropertyChange()方法。
如何使用
说了半天,如果不知道怎么用就一点用都没有。我写了一个简单的Swing程序,上面就一个小button,每次点击调用setProperty()方法,改变待监控的变量。然后做出相应操作,看代码:
package cn.edu.heut.zcl.bean;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FrameChange extends JFrame implements PropertyChangeListener{
BeanTest testBean = new BeanTest();
boolean beanValue = false;
public FrameChange(){
testBean.addPropertyChangeListener(this);
JButton jb = new JButton("change");
this.setTitle("");
this.setBounds(100, 100, 100, 100);
this.setLayout(new FlowLayout());
this.add(jb);
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
testBean.setProperty(!beanValue);
}
});
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String args[]){
new FrameChange();
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getSource() == testBean){
beanValue = !beanValue;
System.out.println("变化"+beanValue);
}
}
}
如上所示,首先要实现监听变量的接口,然后把只要每次都调用了改变变量的方法,就会执行相应的操作。
分享到:
相关推荐
PropertyChangeSupportApi 处理注释和使用 PropertyChangeSupport 所需的额外代码
主要介绍了详解java中的PropertyChangeSupport与PropertyChangeListener的相关资料,需要的朋友可以参考下
闲着没事,突然想起Java的观察者模式中有一个PropertyChangeSupport与PropertyChangeListener,于是就想看看用js能不能也实现一个,毕竟有时候js写的东西也需要一个观察者模式,于是就写了点东西,应该能派上用场。
Design Pattern Java 中的代码 PropertyChangeSupport
在程序中要进行触发事件的操作,使用的方法是在PropertyChangeSupport类中。所以该行声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来触发outString的属性改变事件。 通过上面的程序...
JavaBeans JavaBeans 演示的示例分支主带有 PropertyChangeSupport 和一些演示逻辑的经典 JavaBean