`
junier
  • 浏览: 76652 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

javaBean属性监听机制

阅读更多
说明:共有3个Java类
package com.a;
/**
<p>Title:属性监听  </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author
@version 1.0

*/
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

/**
 * 这是一个实用工具类,支持绑定 (bound) 属性的 bean 可以使用该类。
 * 可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。 此类是可序列化的。
 * 在对它进行序列化时,它将保存(并恢复)本身可序列化的所有侦听器。在序列化期间,将跳过所有不可序列化的侦听器。 
 * @author Administrator
 *
 */
public class PropertyChangeSupportTest {

//	临时的属性变量,为了侦听属性值的变化,该值的状态不再存储,每次的应用都是起初的状态,即変元
	transient protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
	/**
	 * 向侦听器列表添加一个 PropertyChangeListener
	 * @param listener 侦听器
	 */
	public void addPropertyChangeListener(PropertyChangeListener listener)
	{
		if(listener == null)
		{
			throw new IllegalArgumentException();
		}
		listeners.addPropertyChangeListener(listener);
	}
	/**
	 * 通知所有已注册侦听器的绑定属性更新,如果属性值发生改变,就会触发PropertyChangeEvent事件
	 * @param prop 被更改属性的属性名称
	 * @param old  属性的旧值
	 * @param newValue  属性的新值
	 */
	public void firePropertyChangeListener(String prop,Object old,Object newValue)
	{
		listeners.firePropertyChange(prop, old, newValue);
	}
	/**
	 * 从侦听器列表移除一个为所有属性注册的 PropertyChangeListener
	 * 如果将 listener 多次添加到同一事件源,则在被移除之后,它至少将被通知一次
	 * @param listener 侦听器
	 */
	public void removePropertyChangeListener(PropertyChangeListener listener)
	{
		listeners.removePropertyChangeListener(listener);
	}
}//end class

**********************************************************
**********************************************************
package com.a;

import java.rmi.Remote;
/**
<p>Title:属性监听  </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author 
@version 1.0

*/
public class BeanTest extends PropertyChangeSupportTest  {

//  此静态属性是提供侦听的属性名的,其值与下面的属性名一致
	public static final String TEST = "name";
//	定义私有的侦听属性
	private static String name =" null,null,null,null,null,null,null,null";
	
//	private String age ="0";

	public String getName() {
		
		return this.name;
	}

	public void setName(String name) {
//	     属性值未发生改变时,if判断在此仅打印出一条提示语句,返回程序控制权
		if(this.name.equals(name))
		{
//			System.out.println(this.name);
//			System.out.println(name);
			System.out.println("BeanTest的属性name没有变化");
//			程序的控制流程到此结束,不再执行下面的代码
			return;
		}
//		此方法只有在属性值改变后触发,为注册的监听器激发一个PropertyChangeEvent事件
//		如果给定事件的旧值和新值相等并且都是非 null 的,则不会激发事件
		this.firePropertyChangeListener(this.TEST, this.getName(), name);
		
//		这句可以说明点火方法不会修改属性值,实际在propertyChange()方法执行后也是一样的
//		System.out.println("fire与propertyChange方法后的值为:"+this.getName());
//		这句才把新值传了过去,修改了属性值,此句应在调用fire方法后执行
		this.name = name;
//		System.out.println(this.name);
//		this.firePropertyChangeListener(this.name, null, name);
	}

//	public String getAge() {
//		return age;
//	}
//
//	public void setAge(String age) {
//		if(this.age.equals(age))
//		{
//			System.out.println("BeanTest的属性age没有改变");
//			return;
//		}
//		this.firePropertyChangeListener("age", this.getAge(), age);
//	
//		this.age = age;
//	}
	
	
	
}//end class

************************************************************
************************************************************
package com.a;
/**
<p>Title:属性监听  </p>

<p>Description: </p>

<p>Copyright: Copyright (c) 2009</p>

<p>Company: </p>

@author 
@version 1.0

*/
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import com.byh.pubsub.JMSpubsub;
/**
 * listeners接口的方法propertyChange(PropertyChangeEvent evt)可以获得在属性值发生变化时
 * 所激发的propertyChange的事件通知,及对此事件的处理
 * 该类实现了PropertyChangeListener接口后就是一个PropertyChangeListener实体类
 */
public class BeanTestListener implements PropertyChangeListener {

	/**
	 * 实现接口的方法,获得监听的事件源,在firePropertyChangeListener方法调用后执行该方法
	 * evt 是描述事件源
	 */
//	8.1改变
//	private String cto;
	public void propertyChange(PropertyChangeEvent evt) {
		
//		调试
//		System.out.println(BeanTest.TEST);

//		getPropertyName()方法获取已更改属性的编程名称,返回被更改属性的编程名称。如果多个属性被更改,则返回 null
		if(evt.getPropertyName().equals(BeanTest.TEST))
		{
//		调试,此处方法的执行也不会改变侦听的属性值
//			System.out.println("侦听时的值为:"+test.getName());
//      返回的被更改的属性名是空字符串为真时
//			System.out.println("BeanTest的属性name改变");
			
		}
//		测试age
//		if(evt.getPropertyName().equals("age"))
//		{
//			System.out.println("BeanTest的属性age改变");
//		}
//		调试
//		System.out.println(evt.getPropertyName().equals(test.getName()));
		System.out.println("侦听得到的发生变化的属性名:"+evt.getPropertyName()+"新值:"+evt.getNewValue()+"    "+"旧值:"+evt.getOldValue());
//这里可以写当Bean得属性变化后的处理代码				

	}
/**
 * main方法
 */
//	public static void main(String args[])
//	{
//////		实例化bean
//		BeanTest test = new BeanTest();
//////		实例化BeanTestListener
//		BeanTestListener lis = new BeanTestListener();
//////      调用bean继承父类的方法,为该类所有属性注册一个监听器
//		test.addPropertyChangeListener(lis);
//////		set方法中包含firePropertyChangeListener()方法
//		test.setName("2");
////		test.setName("600000.SS,25.30,25.13,25.39,24.79,68261672");
//////		test.setName("test3");
//////		测试age属性
//////		test.setAge("1");
//////		调用bean继承父类的方法,为该类所有属性注册的监听器移除,
//		test.removePropertyChangeListener(lis);
////
//////		test.setName("test9");
//////		打印出test中name的属性
//		System.out.println("最新的name值:"+test.getName());
//////		打印出test中age的属性
//////		System.out.println("最新的age值:"+test.getAge());	
////		
//	}
//	public String getCto() {
//		return cto;
//	}
//	public void setCto(String cto) {
//		this.cto = cto;
//	}
	
}//end class
分享到:
评论
1 楼 fxbird 2011-01-18  
好垃圾的文章,要发blog就有点诚意,把没用的注释删掉,再格式化一下.

相关推荐

    JavaBean 属性

    这种机制使得 JavaBean 在属性值改变时能够自动地通知到其他组件。为了实现这一功能,需要使用 `PropertyChangeSupport` 类来管理属性值变化事件。 ```java public class Alden3 extends Canvas { private String ...

    JavaBean的事件

    在Java开发中,JavaBean是一种遵循特定编码规范的对象,通常用于封装数据属性以及相关的业务逻辑。JavaBean的设计模式不仅支持封装,还提供了事件处理机制,这对于构建动态交互式应用程序至关重要。本文将深入探讨...

    JavaBean - Bound属性

    在JavaBean中,"Bound属性"是指那些当其值发生改变时,能够自动通知相关监听器和其他依赖组件的属性。这种特性使得JavaBean在Java应用程序和网页设计中(如JSP)特别有用,因为它简化了组件之间的交互。 在JavaBean...

    JavaBean课件.rar

    5. **事件处理**:JavaBean可能支持事件监听机制,允许其他组件订阅并响应Bean的特定事件。 在Java开发中,JavaBean广泛应用于MVC(Model-View-Controller)架构,特别是在Web应用中。它们可以作为模型层的实体,...

    javabean源码

    - **事件处理**:JavaBean可以支持事件监听机制,与其他组件进行交互。 3. **JavaBean的创建**: 创建JavaBean时,一般遵循以下步骤: - 定义一个公共类,类名通常以"Bean"结尾。 - 在类中定义私有属性,用于...

    01_JavaBean讲解(上)2

    5. **属性通知**:JavaBean可以提供属性改变的通知机制,通过实现PropertyChangeSupport类,可以监听和处理属性值的变化。 在“01_JavaBean讲解(上)第2部分”中,可能涵盖了以下主题: 1. **JavaBean的创建**:...

    清华大学javaBean课件

    综上所述,JavaBean在J2EE应用开发中扮演着关键角色,通过封装、属性、方法和事件机制,实现了代码的高效重用,简化了组件间的交互,提高了软件开发的效率和质量。理解并熟练运用JavaBean是每个J2EE开发者必备的技能...

    javabean BDK

    4. **属性通知**:为了实现属性改变时的通知机制,可以实现 PropertyChangeSupport 接口,使用 addPropertyChangeListener 和 removePropertyChangeListener 方法来添加和移除监听器。 5. **序列化支持**:如果需要...

    javabean内容.rar

    JavaBean可以支持事件监听机制,允许其他组件注册为监听者,当JavaBean的状态发生改变时,可以通知这些监听者。这在用户界面组件中尤其常见,如按钮点击事件。 4. **JavaBean的序列化** JavaBean默认支持序列化,...

    黑马程序员-----javaBean的操作类学习笔记

    - JavaBeans可以实现事件监听机制,通过发布和订阅事件来与其他组件通信。例如,`ActionListener`接口常用于按钮点击事件。 6. **Introspector类**: - Java的`Introspector`类可以用来获取JavaBean的元信息,如...

    javabean记事本

    此外,属性通常通过getter和setter方法进行访问,这些方法遵循JavaBean的命名约定,如`getXXX()`和`setXXX()`,其中`XXX`是属性名称。 2. **事件处理**:在JavaBean记事本中,可能会涉及到事件监听和处理,例如点击...

    Dozer一个JavaBean至JavaBean映射器

    **Dozer:JavaBean到JavaBean的映射神器** Dozer是Java开发中的一款强大工具,主要用于Java Bean之间的数据映射。它简化了在不同对象模型之间传递数据的过程,尤其在处理复杂对象结构时,其功能显得尤为重要。Dozer...

    JavaBean介绍

    - **自省机制**:JavaBean利用Java反射机制来自动发现其属性和方法,简化了组件之间的交互。 #### 七、总结 JavaBean作为一种重要的Java组件技术,在软件开发领域有着广泛的应用。它不仅简化了代码的编写和维护,...

    javabean开发

    - **属性和事件**:JavaBean通过属性和事件与其他组件通信。 #### 使用设计模式 在JavaBean开发中,设计模式被广泛应用,以解决常见的软件设计问题。其中,观察者模式、工厂模式、单例模式等都是经常使用的模式,...

    新闻文章NTsky新闻发布(提供JavaBean)v1.0-ntskynewsv1.0javabean.rar

    4. **事件处理**:JavaBean可能还需要包含事件监听和处理机制,使得其他组件能够注册监听器来响应特定的事件。 5. **文档**:良好的JavaBean应该有清晰的JavaDoc注释,以便开发者了解其用途、属性、方法和事件。 ...

    javaBean复习材料

    此外,还可能涉及JavaBean的事件处理机制,例如ActionListener,以及如何使用PropertyChangeSupport类来实现属性变化监听。 "学员总结复习本门课程模板V1.0.ppt"则可能是一个详细的复习指南,涵盖了JavaBean的主要...

    设计模式:观察者模式java和javabean

    例如,开发者可以使用`java.beans.PropertyChangeSupport`类来管理属性变更的监听器,当某个属性值改变时,通过`firePropertyChange()`方法通知监听器。 在实际应用中,观察者模式广泛用于各种场景,如GUI组件之间...

    小崔java经验系列之jsp+javabean

    4. **事件**:可选地,JavaBean可以包含事件发布和监听机制。 **JavaBean在JSP中的应用** 在JSP中,JavaBean被用来封装业务逻辑和数据处理,从而与展示层(JSP页面)分离,增强程序的可维护性和可扩展性。以下几点...

    javaEE监听器

    2. **JSP监听器**:JSP监听器是基于JavaBean的事件模型,主要涉及 javax.servlet.jsp.tagext.TagLibraryValidator 和 javax.servlet.jsp.tagext.PageClassifier 接口。这些监听器主要用于定制JSP页面解析和编译过程...

    用于提高java技术的资料 javaBeAN

    5. **IoC(控制反转)和DI(依赖注入)**:Spring框架中的依赖注入机制可以简化JavaBean的使用,通过配置文件或注解管理对象间的依赖关系。 6. **ORM(对象关系映射)框架**:如Hibernate和MyBatis,它们允许...

Global site tag (gtag.js) - Google Analytics