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();

    }

}
原文地址:https://www.cnblogs.com/happyPawpaw/p/3213883.html