2009-08-24 9 views

Antwort

15

JFormattedTextField ist böse wegen schlechter Usability. Zum Beispiel, wenn ein Textfeld nur einen ganzzahligen Wert akzeptieren kann, wird JFormattedTextField alten Müll erlauben und sich dann beschweren, wenn der Fokus verloren geht. Zu allem Überfluss gibt es eine Reihe konfigurierbarer Verhaltensweisen, wenn der Fokus verloren geht (ein klares Zeichen, dass keine von ihnen die richtige Wahl ist).

Es hat auch "K3WL" Formatierer Auswahl. Es scheint auch eine schlechte Interaktion mit dem Dokument (es versucht, eine DocumentFilter zu installieren, aber das ist nicht Teil der Document Schnittstelle).

9

Ich gebe zu, JFormattedTextField ist nicht die einfachste Klasse zu verwenden, und ja, es hat Probleme, aber wie die meisten Komponenten macht es einen vernünftigen Job bei einigen Dingen und einen schlechten Job bei anderen.

Es ermöglicht Ihnen tatsächlich, für Integer-Werte zu bearbeiten, wie die Daten eingegeben werden, wenn Sie einen MaskFormatter verwenden. Für einfache Aufgaben kann es also effektiv sein.

Die Bearbeitung von Daten ist eine komplexe Aufgabe. Manchmal müssen Sie die Daten so bearbeiten, wie sie eingegeben werden (wenn Sie nach Integer-Werten suchen). Manchmal müssen Sie die Daten nach der Eingabe bearbeiten (im Fall der Validierung eines Datums). Dann müssen Sie natürlich entscheiden, wie mit ungültigen Daten umgegangen wird.

Bei nicht-trivialen Aufgaben kann die Konfiguration der Parameter in gewissem Umfang erfolgen. Sie funktionieren möglicherweise nicht immer so, wie Sie es möchten oder wie Sie es erwarten, also müssen Sie experimentieren, um herauszufinden, wann Sie diese Komponente verwenden können/sollten.

+3

Das Hauptproblem von JFormattedTextField besteht darin, dass es für einen seltenen Anwendungsfall anstelle eines allgemeinen Anwendungsfalls optimiert ist, während eine Komponente für die allgemeine Aufgabe fehlt. AWT ist schlimm genug, aber Swing wurde wiederum von Leuten entworfen, die keine Ahnung vom Stand der Technik in der GUI-Programmierung hatten und die gleichen Fehler zweimal machen, wirklich schlimm! Wenn die Designer von Java und Swing sich nur angeschaut hätten, was Delphi oder NeXt's Interface Builder seit Anfang der 90er Jahre konnten und wie sie es gemacht haben, wären sowohl die Sprache als auch Swing viel einfacher zu benutzen! –

7

Ich kämpfe mit JFormattetTextField für den Moment. Ich versuche NumberFormat.getPercentInstance() zum Formatieren meines Prozentwerts zu verwenden.

Das Schlimmste ist, dass .getValue() nicht den gleichen Wert zurückgibt, wie der Benutzer sieht. Im Beispiel, wenn ich 25,5% in das formatierte Textfeld einfüge, rundet es es auf 26% ab, aber .getValue() gibt 0.255 zurück. Das ist böse.

+1

Verwandte Frage: http://stackoverflow.com/questions/2206371/how-to-get-the-same-value-as-the-user-is-seeing-from-a-jformattedtextfield – Jonas