PropertyChangeSupport
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的更多相关文章
- java PropertyChangeSupport委托帧听类的使用
要委托的Bean类写法. import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import ...
- PropertyChangeSupport的使用
使用目的 当你需要监听对象属性的变化时,可以使用PropertyChangeSupport类来管理监听器,可以在一些关联属性的场合使用. 使用示例,以下为BetaConfig对象添加了管理属性监听器的 ...
- PropertyChangeSupport 监听器模式的应用
PropertyChangeSupport 类实现的监听器功能 ,它是java jdk自带的一个类,用于监听某个对象属性的改变来触发相应信息,具体看代码介绍 import java.beans.Pro ...
- jface databinding:部分实现POJO对象的监测
在前一篇博文<jface databinding/PojoBindable实现对POJO对象的支持 >中,已经知道直接对POJO对象进行修改,是不能被绑定的UI组件知道的,在上一篇文章中 ...
- GEF的MVC体系结构
摘要: 本文首先介绍了标准的 MVC 体系构架,同时也介绍了最常见的一类 MVC 模式的变种.之后,文章重点介绍了 MVC 结构在 gef 框架中的体现与应用,以及 gef 是如何综合利用工厂模式.命 ...
- Tomcat 学习笔记二
学习一 java.bean.PropertyChangeListener用来监听bean类的属性值改变.当改变时同时执行对应事件.而且是线程安全的.tomcat用此reload的Boolean值改变是 ...
- Java 最常用类(前1000名) 来自GitHub 3000个项目
这篇文章主要介绍了最常用的1000个Java类(附代码示例),需要的朋友可以参考下 分析Github 3000个开源项目,粗略统计如下.括号内的数字是使用频率 0-3000. 下面的列表显示不全,完整 ...
- Drools文档(八) 规则语言参考
规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领 ...
- SwingWorker
Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT).他们要么从非UI线程访问UI组件:要么不考虑事件执行顺序:要么不使用独立任务线程而在ED ...
随机推荐
- Java 内存溢出思维导图
文 by / 林本托 Tips 做一个终身学习的人. 在 Java 内存中,只有一个区域不会发生 OOM 异常,那就是程序计数器内存.下面的思维导图记录了每个内存区域发生内存异常的条件和基本的解决思路 ...
- Android自己定义view之measure、layout、draw三大流程
自己定义view之measure.layout.draw三大流程 一个view要显示出来.须要经过測量.布局和绘制这三个过程,本章就这三个流程具体探讨一下.View的三大流程具体分析起来比較复杂,本文 ...
- Vue 动态组件、动画、插件
1 动态组件 ①简单来说: 就是几个组件放在一个挂载点下,然后根据父组件的某个变量来决定显示哪个,或者都不显示. ②动态切换: 在挂载点使用component标签,然后使用v-bind:is=”组件名 ...
- 查询系统负载信息 Linux 命令详解
linux uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令过去只显示系统运行多久.现在,可以显示系统已经运行了多长 时间,信息显示依次为:现在时间.系统已经运 ...
- MySql(九):MySQL性能调优——Schema设计的性能优化
一.高效的模型设计 先了解下数据库设计的三大范式 第一范式:要求有主键,并且要求每一个字段原子性不可再分 第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖 第三范式:所有非主键字段和主键字段 ...
- Hudson基本工作原理
从SVN下载代码到hudson服务器本地 -> 将SVN下载的源代码,利用maven[maven依赖pom.xml]或者ant[ant依赖build.xml]打包(war包),pom.xml ...
- 关于docker容器和镜像的区别
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository): 如下图所示,容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可 ...
- 不可恢复的生成错误mergemod.dll 2.0.2600.0
在进行Visual Studio 2008 进行Winform打包时,提示 不可恢复的生成错误,很是郁闷,1.在“开始 - 运行” 中输入以下内容分三次来重新注册下Mergemod.dll. regs ...
- shutil 高级文件操作
High-level file operations 高级的文件操作模块,官网:https://docs.python.org/2/library/shutil.html# os模块提供了对目录或者 ...
- 【流媒体】UPnP的工作过程
UPnP简介 通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议. 该协议的目标是使家庭网络(数据共 ...