Property Event-Delegation

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.BorderLayout;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

class BoundFrame extends JFrame {
    private JButton button1;
    private JButton button2;
    private Random random;
   
    public BoundFrame() {
        initialize();
    }
   
    private void initialize() {
        button1 = new JButton("Select Me");
        button2 = new JButton("No Select Me");
        random = new Random();
       
        button1.addActionListener(new ButtonListener());
        button1.addPropertyChangeListener(new PropertyListener());
        button2.addActionListener(new ButtonListener());
       
        add(button1, BorderLayout.NORTH);
        add(button2, BorderLayout.SOUTH);
       
        setTitle("Property Change Listener");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 100);
        setVisible(true);
    }
   
    private class PropertyListener implements PropertyChangeListener {
        @Override
        public void propertyChange(PropertyChangeEvent e) {
            String property = e.getPropertyName();
            if ("background".equals(property))
                button2.setBackground((Color)e.getNewValue());
        }
    }
   
    private class ButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton)e.getSource();
            int red = random.nextInt(255);
            int green = random.nextInt(255);
            int blue = random.nextInt(255);
            button.setBackground(new Color(red, green, blue));
        }
    }
}

public class BoundSample {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new BoundFrame();
            }
        });
    }
}

Comments

Popular posts from this blog

Zeller's Congruence

Method with variable arguments