SwingPropertyChangeSupport to dynamically update JTextArea

Here is a complete example that uses ObservedPanel in a modeless dialog.

public class PropertyChangeDialog extends JPanel {

    private JLabel label = new JLabel("null", JLabel.CENTER);
    private ObservedPanel observed = new ObservedPanel();

    public PropertyChangeDialog() {
        this.setBorder(BorderFactory.createTitledBorder("Observer"));
        this.add(label);
        observed.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent e) {
                if (e.getPropertyName().equals(ObservedPanel.PHYSICIST)) {
                    String value = e.getNewValue().toString();
                    label.setText(value);
                }
            }
        });
    }

    private void display() {
        JFrame f = new JFrame("PropertyChangeDialog");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationByPlatform(true);
        f.setVisible(true);
        JDialog dialog = new JDialog(f);
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.add(observed);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new PropertyChangeDialog().display();
            }
        });
    }
}

Leave a Comment