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