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 ...
随机推荐
- Sublime Text增加Build system类型,打造一个全能IDE
Sublime text2是一款非常方便的文本编辑器,现在我基本上不用IDE去编写代码,一般都是在Sublime text2中编辑,当然,这里无法执行.debug是软肋,于是上网找了下资料,可以把添加 ...
- zTree变异篇:如何让同级树节点平铺而非垂直显示
昨天有一个zTree的使用者在实际的项目中有着这样一个特殊的需求,要求同级树节点能够水平显示,根据设定的宽度自动换行,效果图如下所示: 通过在浏览器调试模式下观察其同级节点的css为: 这个dis ...
- jmeter Best Practices
性能测试最佳实践之JMeter 16. Best Practices 16.1 Always use latest version of JMeter The performance of JMete ...
- ganglia安装 by frank
作者是frank. 1.安装epelrpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm2. ...
- Java数据结构和算法(六):前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- IOS 视频流
https://github.com/kolyvan/kxmovie demo 项目
- MySQL与Oracle的区别之我见
1. 大的方面(宏观) Oracle为商用数据库,行业中占据相当的地位:市场占比2012年为40%.开发.管理资源相当丰富,有自己的metalink,我也曾用过,有什么问题,都能在那里得到较快速度的解 ...
- 如何在Linux平台下安装JDK
原文链接:http://android.eoe.cn/topic/android_sdk 1.下载Java的开发包JDK: JDK有好几个类型版本,我们只需要选择Java SE类型的版本就行了. 进入 ...
- Atitit js canvas的图像处理类库attilax总结与事业
Atitit js canvas的图像处理类库attilax总结与事业 1.1. 脸部识别JavaScript类库Tracking.js1 1.2. AlloyImage特性1 1.3. CamanJ ...
- [svc]java初步
J2EE.J2SE 和 J2ME 三者的区别有哪些? J2SE, 主要是桌面软件开发,包括swing 等.是后面2个的基础,但是我们不用它做桌面开发.只学习语法. J2EE,网站开发,servlet. ...