Witam,
Mam do napisania prostą aplikacje z wykorzystaniem JavaBeans . Czytałem na ten temat ale jakoś nie do końca wszystko rozumiem .
Aplikacja powinna składać się z trzech pól tekstowych do których można wprowadzać tylko liczby całkowite. Pole tekstowe nr 1 powinno dawać możliwość określenia maksymalnej wartości różnicy odejmowania zawartości pola nr 3 od pola nr 2. W przypadku, gdy po zmianie wartości pól 2 lub 3 różnica ta jest zbyt duża ostatnio wprowadzona przez użytkownika zmiana jest automatycznie wycofywana oraz prezentowany komunikat, że różnica między wartościami pól 2 i 3 przekracza dozwolony limit. Brak określenia wartości pola tekstowego 1 powinno wiązać się z wyczyszczeniem wartości pól 2 i 3 oraz zablokowaniem możliwości ich edycji.
Aplikacja powinna być stworzona zgodnie z zasadami wzorca projektowego Model-View-Controller i w oparciu o mechanizm JavaBeans. Model aplikacji powinien składać się z 3 właściwości liczbowych. Pola tekstowe powinny być widokiem prezentującymi bieżące wartości wspomnianych właściwości. Zmiana wartości któregokolwiek z pól powinna wyzwalać kontroler próbujący odpowiednio zmienić
wartości właściwości. Wymuszenie ograniczenia na różnicę wartości pól 2 i 3 powinno być realizowane za pomocą mechanizmu wetowania JavaBeans.
Poniżej wklejam kod aplikacji napisanej przeze mnie . Prosiłbym kogoś o sprawdzenie jej. Będę wdzięczny za wszelkie wskazówki i porady

 
package zad7;
 
import java.awt.event.*;
import java.beans.*;
import java.io.*;
 
public class Model {
 
    Integer liczba1 = null, liczba2 = null, roznica = null;
    private VetoableChangeSupport vetos = new VetoableChangeSupport(this);
 
    Model() {
    }
 
    public synchronized void addVetoableChangeListener(VetoableChangeListener l) {
        vetos.addVetoableChangeListener(l);
    }
 
    public synchronized void removeVetoableChangeListener(VetoableChangeListener l) {
        vetos.removeVetoableChangeListener(l);
    }
 
    public int getRoznica() {
        return roznica;
    }
 
    public synchronized void setRoznica(int newLiczba1, int newLiczba2)
            throws PropertyVetoException {
 
        int newRoznica = newLiczba1 - newLiczba2;
        vetos.fireVetoableChange("roznica", roznica, new Integer(newRoznica));
        liczba1 = newLiczba1;
        liczba2= newLiczba2;
        roznica = newRoznica;
    }
}
package zad7;
 
import java.beans.*;
 
public class Controller implements VetoableChangeListener {
 
    private int max;
 
    Controller(int maxLim) {
        max = maxLim;
    }
 
    public void vetoableChange(PropertyChangeEvent e)
            throws PropertyVetoException {
        Integer newVal = (Integer) e.getNewValue();
        int val = newVal.intValue();
        if (val > max) {
            throw new PropertyVetoException("Niedopuszczalna zmiana wartości", e);
        }
 
    }
}
package zad7;
 
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
 
public class View extends JFrame implements ActionListener {
 
    JTextField field1 = new JTextField(10);
    JTextField field2 = new JTextField(10);
    JTextField field3 = new JTextField(10);
    Model model;
 
    View(Model m) {
        model = m;
        Container cp = getContentPane();
        cp.setLayout(new FlowLayout());
        cp.add(field1);
        field1.addActionListener(this);
        cp.add(field2);
        field2.addActionListener(this);
        cp.add(field3);
        field3.addActionListener(this);
        setDefaultCloseOperation(3);
        pack();
        show();
    }
 
    public void actionPerformed(ActionEvent e) {
        if (!field1.getText().isEmpty()) {
            field2.setEditable(true);
            field3.setEditable(true);
 
            try {
 
 
 
                int x = 0, y = 0, n = 0;
                try {
                    n = Integer.parseInt(field1.getText());
 
                    Controller c = new Controller(n);
                    model.addVetoableChangeListener(c);
 
 
                    x = Integer.parseInt(field2.getText());
 
 
 
                    y = Integer.parseInt(field3.getText());
 
                } catch (NumberFormatException exc) {
 
                    return;
                }
                model.setRoznica(x, y);
 
 
            } catch (PropertyVetoException exc) {
                System.out.println("" + exc);
                if (model.liczba1 == null || model.liczba2 == null) {
 
                    field2.setText(null);
                    field3.setText(null);
                } else {
                    field2.setText("" + model.liczba1);
                    field3.setText("" + model.liczba2);
                }
            }
        } else {
            field2.setText(null);
            field3.setText(null);
            field2.setEditable(false);
            field3.setEditable(false);
        }
    }
}
package zad7;
 
public class Zad7 {
 
    public static void main(String[] args) {
 
 
        Model m = new Model();
 
        View gui = new View(m);
 
        gui.pack();
        gui.show();
    }
}