1

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; /**
* @author huhy
*
*/
public class MyBean { private String id;
private String name; private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
this); public MyBean(String id, String name) {
this.id = id;
this.name = name;
} public String getId() {
return id;
} public void setId(String id) {
String oldId = this.id;
this.id = id;
changeSupport.firePropertyChange("id", oldId, id);
} public String getName() {
return name;
} public void setName(String name) {
String oldName = this.name;
this.name = name;
changeSupport.firePropertyChange("name", oldName, name);
} public void addPropertyChangeListener(PropertyChangeListener listener) {
changeSupport.addPropertyChangeListener(listener);
} public void removePropertyChangeListener(PropertyChangeListener listener) {
changeSupport.removePropertyChangeListener(listener);
}
}

2

import java.awt.GridLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField; public class Panel1 extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L; private MyBean mybean; private JLabel nameLabel = new JLabel("name1"); private JTextField nameInput = new JTextField();; private JLabel idLabel = new JLabel("id1"); private JTextField idInput = new JTextField(); public Panel1(MyBean mybean) {
this.mybean = mybean;
mybean.addPropertyChangeListener(this);
initialized();
} private void initialized() { setBorder(BorderFactory.createTitledBorder("输出1"));
setLayout(new GridLayout(2, 2));
idInput.setText(mybean.getId());
nameInput.setText(mybean.getName());
add(idLabel);
add(idInput);
add(nameLabel);
add(nameInput); } @Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getSource() == mybean) {
idInput.setText(mybean.getId());
nameInput.setText(mybean.getName());
} }
}

3

import java.awt.GridLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField; public class Panel2 extends JPanel implements PropertyChangeListener {
private static final long serialVersionUID = 1L; private MyBean mybean; private JLabel nameLabel = new JLabel("name2"); private JTextField nameInput = new JTextField();; private JLabel idLabel = new JLabel("id2"); private JTextField idInput = new JTextField(); public Panel2(MyBean mybean) {
this.mybean = mybean;
mybean.addPropertyChangeListener(this);
initialized();
} private void initialized() {
setBorder(BorderFactory.createTitledBorder("输出2"));
setLayout(new GridLayout(2, 2));
idInput.setText(mybean.getId());
nameInput.setText(mybean.getName());
add(idLabel);
add(idInput);
add(nameLabel);
add(nameInput); } @Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getSource() == mybean) {
idInput.setText(mybean.getId());
nameInput.setText(mybean.getName());
} }
}

4

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; /**
* @author huhy
*
*/
public class PropertyChangeSupportTest extends JFrame {
private MyBean mybean = new MyBean("123", "helloKitty"); private JPanel panel = new JPanel(new GridLayout(1, 3)); private JTextField id = new JTextField();
private JTextField name = new JTextField(); private JButton button = new JButton("click"); public PropertyChangeSupportTest() {
initialized();
setLayout(new BorderLayout());
panel.setBorder(BorderFactory.createTitledBorder("输入"));
add(panel, BorderLayout.NORTH);
JPanel panel1 = new Panel1(mybean);
panel1.setPreferredSize(new Dimension(50, 80));
JPanel panel2 = new Panel2(mybean);
panel2.setPreferredSize(new Dimension(50, 100));
add(panel1, BorderLayout.CENTER);
add(panel2, BorderLayout.SOUTH);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
} private void initialized() {
id.setText(mybean.getId());
name.setText(mybean.getName());
button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
mybean.setId(id.getText());
mybean.setName(name.getText()); } });
panel.add(id);
panel.add(name);
panel.add(button); } public static void main(String args[]) {
PropertyChangeSupportTest test = new PropertyChangeSupportTest(); } }

PropertyChangeSupport的更多相关文章

  1. java PropertyChangeSupport委托帧听类的使用

    要委托的Bean类写法. import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import ...

  2. PropertyChangeSupport的使用

    使用目的 当你需要监听对象属性的变化时,可以使用PropertyChangeSupport类来管理监听器,可以在一些关联属性的场合使用. 使用示例,以下为BetaConfig对象添加了管理属性监听器的 ...

  3. PropertyChangeSupport 监听器模式的应用

    PropertyChangeSupport 类实现的监听器功能 ,它是java jdk自带的一个类,用于监听某个对象属性的改变来触发相应信息,具体看代码介绍 import java.beans.Pro ...

  4. jface databinding:部分实现POJO对象的监测

    在前一篇博文<jface databinding/PojoBindable实现对POJO对象的支持  >中,已经知道直接对POJO对象进行修改,是不能被绑定的UI组件知道的,在上一篇文章中 ...

  5. GEF的MVC体系结构

    摘要: 本文首先介绍了标准的 MVC 体系构架,同时也介绍了最常见的一类 MVC 模式的变种.之后,文章重点介绍了 MVC 结构在 gef 框架中的体现与应用,以及 gef 是如何综合利用工厂模式.命 ...

  6. Tomcat 学习笔记二

    学习一 java.bean.PropertyChangeListener用来监听bean类的属性值改变.当改变时同时执行对应事件.而且是线程安全的.tomcat用此reload的Boolean值改变是 ...

  7. Java 最常用类(前1000名) 来自GitHub 3000个项目

    这篇文章主要介绍了最常用的1000个Java类(附代码示例),需要的朋友可以参考下 分析Github 3000个开源项目,粗略统计如下.括号内的数字是使用频率 0-3000. 下面的列表显示不全,完整 ...

  8. Drools文档(八) 规则语言参考

    规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领 ...

  9. SwingWorker

    Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT).他们要么从非UI线程访问UI组件:要么不考虑事件执行顺序:要么不使用独立任务线程而在ED ...

随机推荐

  1. 学习笔记之 curl 命令用法详解

    [前言]     本文翻译和整理自 Linux-2.6.32 中和 curl 相关的 Manual Page 描述文档. 文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对 cu ...

  2. Python 文件 readlines() 方法

    概述 Python 文件 readlines() 方法用于读取整个文件(所有行)到一个列表,可以由for... in ... 结构进行遍历.列表的每一行变成列表的每一个元素. 语法 readlines ...

  3. 具体解释Hibernate中cascade与inverse

    学习hibernate的时候对级联关系的概念老是分不清楚,尤其是cascade.inverse傻傻分不清.以下通过样例来简单说明. 准备工作: 首先创建数据库,新建两张表: 教室表classes (字 ...

  4. BT5配置网络

    root@bt:~# vi /etc/network/interfaces 编辑IP地址auto eth0#iface eth0 inet dhcpiface eth0 inet staticaddr ...

  5. thinkphp的系统变量

    define('EXT', '.php'); define('DS', DIRECTORY_SEPARATOR); defined('THINK_PATH') or define('THINK_PAT ...

  6. 微信小程序 自定义单选复选按钮组的实现(用于实现购物车产品列表功能)

    (一)单选按钮组 模型图如下: index.js Page({ data: { parameter: [{ id: 1, name: '银色' }, { id: 2, name: '白色' },{ i ...

  7. metaspolit 命令大全

    一.msfconsole相关命令 二.database 三.autopwn自动化攻击工具 四.metaspolit常见渗透命令大全

  8. cocos2d-x 模态对话框的实现

    心情不好,恩.不扯淡了.直接讲. ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景,这 ...

  9. 直接获取摄像头传回的图像数据(人脸、微笑、眨眼: 识别--&gt;第一步):图像识别第一步

    转:ios通过摄像头获取特定数据(http://www.2cto.com/kf/201404/290777.html) 凝视: 因为近期项目需求,须要一个可以实现对摄像头图片获取当中部分内容的功能,类 ...

  10. iOS 应用程序目录结构

    iOS应用程序采用的是沙盒原理设计,普及一下知识:沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限. 具体的特点有三点:1.每个应用程序都有自己的存储空间:  ...