使用PropertyChangeSupport监控变量

 

使用PropertyChangeSupport监控变量

作者:Legend

QQ158067568

这两天在写毕设,遇到了这个一种情况,我的程序中有一个两个状态,我用一个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);
		}
	}
}

 

 

 

如上所示,首先要实现监听变量的接口,然后把只要每次都调用了改变变量的方法,就会执行相应的操作。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值