Frage

In dieser Frage Gibt es eine Möglichkeit, nur numerische Werte in einem JTextField? eine der Antworten zu akzeptieren, schlug vor, dass JFormattedTextField Probleme hatte.

Ich habe noch nicht benutzt, aber könnte jemand bitte erweitern (oder nicht) auf den Problemen mit dieser Klasse?

War es hilfreich?

Lösung

JFormattedTextField ist böse wegen der schlechten Bedienbarkeit. Zum Beispiel, wenn ein Textfeld Lage sein sollte, einen ganzzahligen Wert zu annehmen, wird JFormattedTextField alle alten Müll lassen und dann beschweren, wenn der Fokus verloren. Um noch schlimmer machen, zählt, hat es eine Reihe von konfigurierbaren Verhalten, wenn der Fokus verloren (ein klares Zeichen dafür, dass keiner von ihnen die richtige Wahl ist).

Es hat auch „k3wl“ Formatierer Auswahl. Es scheint auch eine schlechte Interaktion mit dem Dokument zu haben (er versucht, eine DocumentFilter zu installieren, aber das ist nicht Teil der Document Schnittstelle).

Andere Tipps

Ich gebe JFormattedTextField ist nicht die einfachste Klasse zu verwenden, und ja, es Probleme hat, sondern wie die meisten Komponenten macht es einen vernünftigen Job auf einige Dinge und schlechte Arbeit bei anderen.

Es ist in der Tat Sie für Integer-Werte zu bearbeiten lassen, wenn die Daten eingegeben hat, wenn Sie einen MaskFormatter verwenden. So für einfache Aufgaben kann es wirksam sein.

von Daten bearbeiten ist eine komplexe Aufgabe. Manchmal müssen Sie die Daten bearbeiten, wie es (im Fall der Überprüfung für Integer-Werte) eingegeben wird. Manchmal müssen Sie die Daten bearbeiten, nachdem es (im Falle der Validierung ein Datum) eingegeben wird. Dann natürlich müssen Sie entscheiden, wie ungültige Daten zu verarbeiten.

Es kann eine bestimmte Menge sein, die Parameter zu konfigurieren, wenn nicht-triviale Aufgaben. Sie können nicht immer so, wie Sie sie wollen oder so, wie Sie sie erwarten, so müssen Sie tun, um experimentieren, um herauszufinden, wenn Sie können / sollten diese Komponente verwenden.

Ich bin im Moment mit JFormattetTextField kämpfen. Ich versuche NumberFormat.getPercentInstance() zu verwenden, um meinen Prozent-Wert formatiert wird.

Das Schlimmste ist, dass .getValue() nicht der gleiche Wert wie der Benutzer zurückkehrt sieht. Im Beispiel, wenn ich 25,5% in dem formatierten Textfeld eingeben, dann rundet es 26%, aber .getValue() kehrt 0.255. Das ist schlecht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top