So setzen Sie eine Maske, um ein SWT-Text nur mit Dezimalzahlen
Was ich will, ist, dass der Benutzer nur die Eingabe von Dezimalzahlen auf einem Text, den ich nicht wollen, es zu ermöglichen, text-Eingabe wie:
- HALLO
- ABC.34
- 34.HEY
- 32.3333.123
Habe ich versucht, mit VerifyListener, aber es gibt nur mich der Teil des Textes, habe die eingefügt, so dass ich am Ende mit dem text, den ich einfügen möchte, und den text vor dem einfügen, versuchte auch die Kombination von text, aber ich habe Probleme beim löschen-Taste (backspace) und ich am Ende mit einem String wie 234[BACKSPACE]455.
Gibt es eine Möglichkeit, um eine Maske auf einen Text oder eine erfolgreich kombinieren VerifyEvent mit dem aktuellen text zu erhalten, den "neuen text", bevor Sie es dem Text?
Zu deinem problem mit dem vollständigen text können Sie ModifyListener.
InformationsquelleAutor Josejulio | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie eine
Listener
auf dieText
mitSWT.Verify
. Innerhalb dieserListener
Sie können überprüfen, dass die Eingabe enthält nur eine Dezimalzahl.Folgenden wird nur noch das einlegen der Dezimalstellen in das Textfeld ein. Überprüfen Sie den Wert jedes mal, wenn Sie etwas ändern in der text und verwerfen es, wenn es nicht eine Dezimalzahl.
Dies wird Ihr problem lösen, da die
VerifyListener
ausgeführt wird, BEVOR der neue text eingegeben wird. Der neue text passieren, dass der Zuhörer akzeptiert werden.Siehe meine bearbeitete Antwort.
Sorry, mein problem ist nicht die Validierung, mein problem ist, dass ich nicht finden kann wo man die Validierung, grundsätzlich habe ich zu erhalten müssen Sie die Zeichenkette, in die neuer Wert, BEVOR es tatsächlich geschrieben der Text, ich habe versucht, die Kombination sowohl die oldText und die VerifyEvent text, aber ich hatte Probleme mit ' und löscht.
Benutzen Sie einfach den code, den ich oben in der
SWT.Verify
Listener
. Sie sollten in der Lage sein, um es herauszufinden, nun, ich muss Los...während der Eingabe, eine "Teil-Ausdruck" wie "4." oder "5e" auftreten. Diese Art von Ausdruck sollte gültig sein, während Sie Tippen. Es kann jedoch nicht analysiert werden, um einen float-Wert mit Float.parseFloat(Ausdruck). Die einzelnen Zeichen sollten überprüft werden und nur die Ziffern und.eE+- haben zu dürfen.
InformationsquelleAutor Baz
Haben Sie versucht, die FormattedText-Widgets aus dem Nebula? - Sie sind eine einfache Möglichkeit zur Implementierung dieser Art von input-Feldern finden Sie unter http://eclipse.org/nebula/widgets/formattedtext/formattedtext.php
Nebula Formattedtext ist noch in der Alpha... ich muss eine komplette überarbeitung / Neuentwicklung, vor allem in der DATUM und ZEIT-Formatierer (viel zu viel code da, omg!!!). Immer noch buggy, und ich wünschte, es gäbe bessere alternativen... SWT saugt die Formatierung Abteilung.
InformationsquelleAutor Tom Seidel
Um das Verhalten, das ich wollte, ich hatte mehrere Zuhörer:
Einen ModifyListener überprüft, ob der Fehler Dekoration versteckt werden kann, während Sie Tippen. Es zeigt nicht die Fehler Dekoration da ungültige partielle Eingabe wie "4e-" erlaubt ist, um endlich in "4e-3"
Den ModifyListener weiter verbessert werden könnte, zu prüfen, für partial-input, der nicht in der Lage ist, um endlich einen gültigen Gesamt-Eingang, z.B. "4e-....3". In diesem speziellen Fall die ModifyListener aktivieren sollte der Fehler Dekoration während der Eingabe.
InformationsquelleAutor Stefan
Zusätzlich zu @Tom Seidel beantworten:
Sie verwenden konnte
org.eclipse.swt.widgets.Spinner
. Dies erlaubt nur Ziffern. Sie können angeben, min-und max-Wert und der Rückgabewert ist eineint
so dass keine Notwendigkeit zu werfenString
.Den Wert der
Spinner
können als abgerufen werden durch aufrufen von:InformationsquelleAutor Naxos84