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 ...
随机推荐
- matlab中的Traing、Validation、Testing
<matlab神经网络30个案例分析> ROC曲线是反映敏感性和特异性连续变量的综合指标,roc曲线真阳性率为纵坐标,假阳性率为横坐标,在坐标上由无数个临界值求出的无数对真阳性率和假阳性率 ...
- 关于QueryCache的一次打脸
[背景问题] 前一段时间给一套MySQL数据库加上了监控,运行一段时间后有人反馈监控到的insert,update,delete,select的数量中select的数量有像比 本应该的量少了不少! 我 ...
- Mysql 导入CSV数据 语句 导入时出现乱码的解决方案
1. 登陆mysql 2. use testdb 3. 执行导入语句 LOAD DATA LOCAL INFILE 'd://exportedtest2.csv' INTO TABLE usertab ...
- ubuntu18.04优盘只读问题
1.打开终端,查看系统日志文件: tail -f /var/log/syslog 2.插入优盘. 3.系统文集syslog输出以下内容: Feb :: noi dbus-daemon[]: [sess ...
- Socket网络编程--Libev库学习(2)
这一小节讲各个观察器(Watcher) 在libev下面watcher相当于EventHandler这么一个概念,通常里面会绑定fd回调函数以及我们需要关注的事件. 然后一旦触发事件之后会触发我们使用 ...
- mysql protocol
http://hutaow.com/blog/2013/11/06/mysql-protocol-analysis/ https://dev.mysql.com/doc/internals/en/cl ...
- query compiler
https://db.in.tum.de/teaching/ws1415/queryopt/chapter3.pdf?lang=de pi3.informatik.uni-mannheim.de/~m ...
- Java Base64 编码解码方案总结
Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应用上,Base64除了能将Binary资料可视化之外 ...
- cmd命令操作Oracle数据库
//注意cmd命令执行的密码字符不能过于复杂 不能带有特殊符号 以免执行不通过 譬如有!@#¥%……&*之类的 所以在Oracle数据库设置密码是不要太复杂 /String Database ...
- RHEL7.2安装部署redmine
redmine的安装方式有很多种,本文使用docker进行安装,关于rhel7的docker安装可以参考这里 1. 使用docker安装redmine [root@localhost ~]# dock ...