`
158067568
  • 浏览: 326588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics