DocumentFilter und Regex

JFormattedTextField field = new JFormattedTextField(currencyInstance);
((DefaultFormatter)field.getFormatter()).setAllowsInvalid(false);

Supi, danke! Das sieht schonmal ganz gut aus und funktioniert so wie gewünscht. Ich werde dann wohl meine Klasse sein lassen und auf JFormattedTextField umsteigen…

Ja das schöne daran ist, dass es auch für andere Locales funktioniert.

Der Vorteil ist, dass ich mich nicht mehr mit dem Regex rumärgern muss.

Was aber vorher mit meiner eigenen Textfeld-Klasse schick war: ich hatte bei einem Fokuserhalt umgeschaltet in ein Dezimalformat, der Text war selektiert, ich konnte also gleich einen neuen Betrag eingeben, und dann mit TAB oder ENTER ins nächste Textfeld springen. Der Dezimalbetrag wurde dann bei Fokusverlust als Währungsbetrag (mit Eurozeichen) angezeigt, intern aber als BigDecimal-Value gespeichert. Muss mal schauen, ob das mit dem JFormattedTextField auch irgendwie möglich ist, oder wenigstens ein bisschen ähnlich, da dies bei der Eingabe ziemlich vorteilhaft ist.

Ja ist glaub auch möglich musst dir mal den Code anschauen, bin aus Swing leider schon ne Weile raus :wink:
Auf jeden Fall gibt es für Ein- und Ausgabe Formattierungs-Methoden die man überschreiben kann.

OK, schau ich mir mal an. Und wäre es denn angebracht/sinnvoll, wenn ich in meinem Programm öfters diese Komponente brauche, eine eigene Klasse abgeleitet von JFormattedTextField zu schreiben und dann mit den ganzen Einstellungen zu erstellen und einzusetzen, anstatt das alles immer wieder bei jeder Komponente dazuzuschreiben.

Oder eine Factory, der du einen Formatter mitgeben kannst…

Wie würde das denn aussehen? Irgendwie versteh ich das mit dem Formatter oder der Factory noch nicht so ganz. Vorher hatte ich ja dem Konstruktor des JFormattedTextField ein NumberFormat.getCurrencyInstance() übergeben. Wenn ich nun eine von JFormattedTextField abgeleitete Klasse habe, wie kann ich dann dort dieses NumberFormat setzen?

Sollst ja die Klasse nicht ableiten, sondern ne Factory methode:

z.B.

public static JFormattedTextField createCurrencyField(){
JFormattedTextField field = JFormattedTextField (…)
//setz alle attribute
return field;

}

public static JFormattedTextField createFormattetField(Formatter formatter){
JFormattedTextField field = JFormattedTextField (formatter)
//setz alle attribute
return field;

}

Hmm, ok, aber so richtig hab ich noch nicht verstanden, wann und warum die Factory-Methode benutzt wird. Wo ist da der Unterschied oder Vorteil gegenüber zu einer eigenen Klasse? Kannst du das erklären, bitte.

Google liefert doch alles :slight_smile:

Heißt wenn du irgendwann doch eine eigene Implementierung von JFormattedTextField willst musst du das nur in eer Factory Methode ändern, der restliche Code bleibt gleich und du hast es an einer zentralen Stelle…

[QUOTE=SirWayne]Google liefert doch alles :slight_smile:

http://de.wikipedia.org/wiki/Fabrikmethode[/QUOTE]

Ja, gelesen hatte ich das zwar schon, aber ob ich es so richtig verstanden habe…

Heißt wenn du irgendwann doch eine eigene Implementierung von JFormattedTextField willst musst du das nur in eer Factory Methode ändern, der restliche Code bleibt gleich und du hast es an einer zentralen Stelle…

Die zentrale Stelle hätte ich doch mit einer Klasse (z.B. abgeleitet von JFormattedTextField, JTextField oder sonstwas) ebenfalls. Und ich müsste auch nur dort in der einen Klasse Änderungen vornehmen. Sorry für die Nachfragen, aber der Vorteil ist mir noch nicht ganz klar…

[QUOTE=Camino]
Die zentrale Stelle hätte ich doch mit einer Klasse (z.B. abgeleitet von JFormattedTextField, JTextField oder sonstwas) ebenfalls. Und ich müsste auch nur dort in der einen Klasse Änderungen vornehmen. Sorry für die Nachfragen, aber der Vorteil ist mir noch nicht ganz klar…[/QUOTE]

Probiers aus und teste es, denke es ist zu abstrakt gerade. Ich finde das Factory für UI Elemente sehr gut.

Willst du für jedes „besondere“ JFormattedTextField eine eigene Klasse machen und „nur“ den Konstruktur überschreiben und der rest ist alles gleich und die können sonst nichts besonderes mehr? Is glaub nicht im Sinne der Vererbung :wink: