Observer + Beans Binding no swing

Aew galera estou estudando um pouco do MVC em ambiente desktop, e estou tentando fazer o seguinte.

Vi varios exemplos na internet sobre o Observer e o Beans Binding, quero fazer uma forma onde os campos de uma view estejam linkados com os atributos de um objeto, e ao alterar o valor do objeto seja disparado pelo Observer os dados alterados em outras views que usam o mesmo objeto por exemplo

tenho a classe circulo

[code]
public class Circulo extends Observable {

private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
private int raio;
private double area;

public Circulo() {
    super();
}

public void setRaio(int raio) {
    int oldRaio = this.raio;
    this.raio = raio;
    propertyChangeSupport.firePropertyChange("raio", oldRaio, raio);
    setChanged();
    notifyObservers();
    System.out.println(oldRaio + " - " + raio);
}

public int getRaio() {
    return raio;
}

public void setArea(double area) {
    double oldArea = this.area;
    this.area = area;
    propertyChangeSupport.firePropertyChange("area", oldArea, area);
    setChanged();
    notifyObservers();
    System.out.println(oldArea + " - " + area);
}

public double getArea() {
    return area;
}

public double calculaArea() {
    return Math.pow(this.raio, 2) * Math.PI;
}

public void addPropertyChangeListener(PropertyChangeListener listener) {
    propertyChangeSupport.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
    propertyChangeSupport.removePropertyChangeListener(listener);
}

}[/code]

Agora as views

[code]public class RaioCirculoView extends javax.swing.JFrame {

private Circulo circulo;

public RaioCirculoView() {
    this.circulo = new Circulo();
    initComponents();
}

public Circulo getCirculo() {
    return circulo;
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
    bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

    jPanel1 = new javax.swing.JPanel();
    btnCalcular = new javax.swing.JButton();
    btnSair = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    txtRaio = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setBackground(new java.awt.Color(255, 255, 255));
    jPanel1.setLayout(null);

    btnCalcular.setText("Calcular");
    jPanel1.add(btnCalcular);
    btnCalcular.setBounds(30, 30, 73, 23);

    btnSair.setText("Sair");
    jPanel1.add(btnSair);
    btnSair.setBounds(110, 30, 53, 23);

    jLabel1.setText("Raio");
    jPanel1.add(jLabel1);
    jLabel1.setBounds(10, 10, 21, 14);

    org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${circulo.raio}"), txtRaio, org.jdesktop.beansbinding.BeanProperty.create("text"));
    bindingGroup.addBinding(binding);

    jPanel1.add(txtRaio);
    txtRaio.setBounds(40, 10, 140, 20);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 67, Short.MAX_VALUE)
    );

    bindingGroup.bind();

    pack();
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JButton btnCalcular;
private javax.swing.JButton btnSair;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField txtRaio;
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
// End of variables declaration

}[/code]

Onde faço um binding com o textfield.
e aqui tenho a classe Area

[code]public class AreaCirculoView extends javax.swing.JFrame implements Observer {

private Circulo circulo;

/** Creates new form AreaCirculoView */
public AreaCirculoView(Circulo circulo) {
    this.circulo = circulo;
    this.circulo.addObserver(this);
    this.update(this.circulo, null);
    initComponents();
}

public Circulo getCirculo() {
    return circulo;
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    jPanel1 = new javax.swing.JPanel();
    jLabel1 = new javax.swing.JLabel();
    jTextField1 = new javax.swing.JTextField();
    jButton1 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel1.setBackground(new java.awt.Color(255, 255, 255));
    jPanel1.setLayout(null);

    jLabel1.setText("Área");
    jPanel1.add(jLabel1);
    jLabel1.setBounds(10, 11, 23, 14);
    jPanel1.add(jTextField1);
    jTextField1.setBounds(40, 10, 160, 20);

    jButton1.setText("Valor");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
    jPanel1.add(jButton1);
    jButton1.setBounds(130, 30, 59, 23);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 219, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 64, Short.MAX_VALUE)
    );

    pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   System.out.println(this.circulo.getArea());
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField jTextField1;
// End of variables declaration

@Override
public void update(Observable o, Object arg) {
    this.circulo.setArea(circulo.calculaArea());

// jTextField1.setText(String.valueOf(circulo.getArea()));
}[/code]

[code]public class Teste {

public static void main(String[] args) {

    RaioCirculoView raioView = new RaioCirculoView();
    AreaCirculoView areaView = new AreaCirculoView(raioView.getCirculo());
    
    raioView.setVisible(true);
    areaView.setVisible(true);
}

}[/code]

mas ao executar esse teste da a seguinte exception

Exception in thread "main" java.lang.StackOverflowError at java.util.Arrays.copyOf(Arrays.java:2734) at java.util.Vector.toArray(Vector.java:643) at java.util.Observable.notifyObservers(Observable.java:137) at java.util.Observable.notifyObservers(Observable.java:98) at teste.Circulo.setArea(Circulo.java:35) at view.AreaCirculoView.update(AreaCirculoView.java:94) at java.util.Observable.notifyObservers(Observable.java:142) at java.util.Observable.notifyObservers(Observable.java:98) at teste.Circulo.setArea(Circulo.java:35) at view.AreaCirculoView.update(AreaCirculoView.java:94)

gostaria que ao informar um valor no campo raio, disparace por Observer a view Area e mostrace o valor no campo area