HELLOWORLD级事件属性监听小技巧,随便写了点测试代码[转]
2008-05-27 20:58
861 查看
首先,定义一个基类,负责加入监听者,
package net.cafe;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:01:56
* To change this template use File | Settings | File Templates.
*/
public class BaseEventBean ...{
protected PropertyChangeSupport pcs;
public void addPropertyChangeListener(PropertyChangeListener listener)...{
if(pcs == null)...{
pcs = new PropertyChangeSupport(this);
}
pcs.addPropertyChangeListener(listener);
}
public void removeChangeListener(PropertyChangeListener listener) ...{
if(pcs != null)...{
pcs.removePropertyChangeListener(listener);
}
}
}
一个POJO继承这个类,并在SET方法里添加触发事件的方法
package net.cafe;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:15:34
* To change this template use File | Settings | File Templates.
*/
public class FoolBean extends BaseEventBean ...{
private String userName;
private String password;
public String getPassword() ...{
return password;
}
public void setPassword(String newPassword) ...{
String oldPassword = password;
this.password = newPassword;
pcs.firePropertyChange("password",oldPassword,password);
}
public String getUserName() ...{
return userName;
}
public void setUserName(String userName) ...{
this.userName = userName;
}
}
属性监听者
package net.cafe;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:12:33
* To change this template use File | Settings | File Templates.
*/
public class Listener implements PropertyChangeListener ...{
public void propertyChange(PropertyChangeEvent evt) ...{
System.out.println("==========old value=========" + evt.getOldValue()) ;
System.out.println("==========new Value========" + evt.getNewValue());
}
}
测试代码
package net.cafe;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:24:28
* To change this template use File | Settings | File Templates.
*/
public class BeanEventTest ...{
public static void main(String[] args)...{
FoolBean bean = new FoolBean();
bean.addPropertyChangeListener(new Listener());
bean.setPassword("22222");
bean.setPassword("33333");
}
}
BTW,SUN的java.beans.*包含了大多空包,这些方法都需要自己扩展,我们完全不需要用它定义的方法名。
上面的例子完全可以用自己的方法来实现.
通过这个例子,可以方便的构建一个GUI的事件监听类。业务处理层只需要处理数据,而GUI监听器负责将数据更新到界面上。
package net.cafe;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:01:56
* To change this template use File | Settings | File Templates.
*/
public class BaseEventBean ...{
protected PropertyChangeSupport pcs;
public void addPropertyChangeListener(PropertyChangeListener listener)...{
if(pcs == null)...{
pcs = new PropertyChangeSupport(this);
}
pcs.addPropertyChangeListener(listener);
}
public void removeChangeListener(PropertyChangeListener listener) ...{
if(pcs != null)...{
pcs.removePropertyChangeListener(listener);
}
}
}
一个POJO继承这个类,并在SET方法里添加触发事件的方法
package net.cafe;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:15:34
* To change this template use File | Settings | File Templates.
*/
public class FoolBean extends BaseEventBean ...{
private String userName;
private String password;
public String getPassword() ...{
return password;
}
public void setPassword(String newPassword) ...{
String oldPassword = password;
this.password = newPassword;
pcs.firePropertyChange("password",oldPassword,password);
}
public String getUserName() ...{
return userName;
}
public void setUserName(String userName) ...{
this.userName = userName;
}
}
属性监听者
package net.cafe;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:12:33
* To change this template use File | Settings | File Templates.
*/
public class Listener implements PropertyChangeListener ...{
public void propertyChange(PropertyChangeEvent evt) ...{
System.out.println("==========old value=========" + evt.getOldValue()) ;
System.out.println("==========new Value========" + evt.getNewValue());
}
}
测试代码
package net.cafe;
/** *//**
* Created by IntelliJ IDEA.
* User: JJYAO
* Date: 2004-11-1
* Time: 23:24:28
* To change this template use File | Settings | File Templates.
*/
public class BeanEventTest ...{
public static void main(String[] args)...{
FoolBean bean = new FoolBean();
bean.addPropertyChangeListener(new Listener());
bean.setPassword("22222");
bean.setPassword("33333");
}
}
BTW,SUN的java.beans.*包含了大多空包,这些方法都需要自己扩展,我们完全不需要用它定义的方法名。
上面的例子完全可以用自己的方法来实现.
通过这个例子,可以方便的构建一个GUI的事件监听类。业务处理层只需要处理数据,而GUI监听器负责将数据更新到界面上。
相关文章推荐
- HELLOWORLD级事件属性监听小技巧,随便写了点测试代码
- jsp name属性相同的一组输入框input,输入其中一个值,其余值跟随改变事件监听代码
- Java添加事件监听的四种方法代码实例
- 监听脚本绑定事件与属性改变事件
- YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧
- 获取对象的接口信息(方法/属性/事件)(VB6代码)
- 通过代码调整系统音量,监听音量实体按键事件
- android 监听SDCard安装和卸载的代码片段(测试通过)
- CMFCPropertyGridCtrl相关;属性改变事件代码
- HTML 事件与属性,网页设计中常用的CSS属性,HTML ASCII 代码参考手册
- input输入域的事件监听最佳代码
- 动作事件的监听演示代码
- Servlet事件监听器、监听servletContext域对象创建和销毁、监听三个域对象属性变化
- 求助 android监听事件 实现代码监听鼠标的左键,中间键,右键
- java实例化代码------------------监听事件
- Android 属性动画监听事件与一个菜单的例子
- 这么详细的分类 VB/VB.NET源代码网站你见过没有? VB/VB.NET中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- 这么详细的分类 PostgreSQL源代码网站你见过没有? PostgreSQL中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- CMFCPropertyGridCtrl的属性改变事件代码
- JS动态生成代码监听事件