Hallo,
ich habe eine Eingabemaske welche aus JTextField Items besteht.
Wie befüllt man am besten das Model im MVC-Kontext?
Aktuell befülle ich das Model in meinem Controller wenn die "save" Action ausgeführt wird (Wert aus der View Lesen mittels getWert und ins Model schreiben mittels setWert).
Danach überführe ich das Model aber direkt wieder in ein Transfer-Objekt und übergebe dieses Transfer-Objekt dann einer EJB zur Ablage in der DB. Bei dem Ansatz ist das Model meiner Meinung nach ziemlich sinnfrei.
Was mir eher vorschwebt...
Nach der erfolgten Eingabe des Anwenders im JTextField werden die Daten sofort im Model abgelegt und es kann eine rudimentäre Fehlerprüfung (Format, Pflichtfeld) im Model erfolgen. Via Observer Pattern wird dann der Fehler an die View zurückgemeldet.
Nun habe ich aber ein Problem das füllen des Models anständig zu bewerkstelligen. Meine Idee ist ein FocusAdapter auf dem JTextfield:
Nun ist mein Save-Button aber als DefaultButton konfiguriert, kann also jederzeit mittels [Enter] angesprungen werden.
Bei diesem Vorgang verliert mein JTextField jedoch nicht den Fokus, der FocusListener wird also nicht ausgelöst, und es erfolgt keine Ablage der Daten im Model.
Ich hatte die Idee im Controller welcher die actionPerformed meines Buttons handelt einfach den Fokus auf den Button zu legen - das hilft mir aber nicht, da der requestFocus() auf dem Button offensichtlich erst ausgeführt wird von Swing, wenn actionPerformed des Buttons durchgelaufen ist.
Einen DocumentListener hatte ich verworfen, da dieser ja bei jeder Änderung mein Model ändern würde und ggf. Fehler auslösen würde (z.B. wenn min 10 Zeichen eingegeben werden müssen).
Also... wie macht mans richtig?
ich habe eine Eingabemaske welche aus JTextField Items besteht.
Wie befüllt man am besten das Model im MVC-Kontext?
Aktuell befülle ich das Model in meinem Controller wenn die "save" Action ausgeführt wird (Wert aus der View Lesen mittels getWert und ins Model schreiben mittels setWert).
Danach überführe ich das Model aber direkt wieder in ein Transfer-Objekt und übergebe dieses Transfer-Objekt dann einer EJB zur Ablage in der DB. Bei dem Ansatz ist das Model meiner Meinung nach ziemlich sinnfrei.
Was mir eher vorschwebt...
Nach der erfolgten Eingabe des Anwenders im JTextField werden die Daten sofort im Model abgelegt und es kann eine rudimentäre Fehlerprüfung (Format, Pflichtfeld) im Model erfolgen. Via Observer Pattern wird dann der Fehler an die View zurückgemeldet.
Nun habe ich aber ein Problem das füllen des Models anständig zu bewerkstelligen. Meine Idee ist ein FocusAdapter auf dem JTextfield:
Java:
nameField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("->"+nameField.getText());
model.setUsername(nameField.getText());
}
});
Nun ist mein Save-Button aber als DefaultButton konfiguriert, kann also jederzeit mittels [Enter] angesprungen werden.
Bei diesem Vorgang verliert mein JTextField jedoch nicht den Fokus, der FocusListener wird also nicht ausgelöst, und es erfolgt keine Ablage der Daten im Model.
Ich hatte die Idee im Controller welcher die actionPerformed meines Buttons handelt einfach den Fokus auf den Button zu legen - das hilft mir aber nicht, da der requestFocus() auf dem Button offensichtlich erst ausgeführt wird von Swing, wenn actionPerformed des Buttons durchgelaufen ist.
Einen DocumentListener hatte ich verworfen, da dieser ja bei jeder Änderung mein Model ändern würde und ggf. Fehler auslösen würde (z.B. wenn min 10 Zeichen eingegeben werden müssen).
Also... wie macht mans richtig?