JavaFX 2.2 TextField maxlength
Arbeite ich mit JavaFX 2.2 Projekt und ich habe ein problem mit der TextField-Steuerelements. Ich will zur Begrenzung der Zeichen, die ein Benutzer eingeben wird, um jedes TextField-aber ich kann nicht finden, eine Eigenschaft oder sowas wie maxlength. Das gleiche problem war, bestehende zu schwingen und gelöst wurde mit diese Weg. Wie lösen es für JavaFX 2.2?
Nicht schön für JavaFX nicht, dass solche grundlegende Funktion out of the box.
InformationsquelleAutor George Siggouroglou | 2013-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein besserer Weg, um den job auf einem generischen text-Feld:
Funktioniert perfekt, außer, dass die Undo-bug.
U tun dagegen, wenn ich gebeten zu erklären, was passiert, wenn :::: String s = tf.getText().substring(0, maxLength); wird ersetzt durch s = oldValue; weil ich schwer zu verstehen!
InformationsquelleAutor ceklock
Mit java8u40 haben wir eine neue Klasse TextFormatter: eine Ihrer Hauptaufgaben ist es, einen Haken in jede änderung der Texteingabe vor es bekommt engagieren für den Inhalt. In diesem hook können wir akzeptieren/reject oder sogar ändern Sie die vorgeschlagene änderung.
Die Anforderung gelöst OP ' s selbst beantworten ist
Mit einem TextFormatter, dies könnte umgesetzt werden, wie:
Asides:
InformationsquelleAutor kleopatra
Können Sie etwas tun, ähnlich dem Ansatz, der hier beschrieben: http://fxexperience.com/2012/02/restricting-input-on-a-textfield/
Es ist möglich, aber die Logik wird zu Komplex für eine kurze Probe.
Damit es funktioniert, ich habe ein 0-argument-Konstruktor und eine setter-Methode für die limit-Eigenschaft. Thank u.
InformationsquelleAutor Sergey Grinev
Den vollständigen code, den ich verwendet, um mein problem zu lösen ist der folgende code. Ich erweitere die TextField-Klasse wie Sergej Grinev getan und ich habe wieder einen leeren Konstruktor. Um die maxlength-ich habe eine setter-Methode. Ich zum ersten mal überprüfen und ersetzen Sie den text in das TextField, weil ich deaktivieren möchten, Sie mehr als maxlength Zeichen, sonst ist die maxlength + 1 Zeichen eingefügt werden sollen, am Ende des TextField-Objekts und die ersten charcter von dem TextField gelöscht werden.
Innerhalb der fxml-Datei habe ich den import (der das Paket, das die TextFieldLimited Klasse ist vorhanden) auf den Anfang der Datei, und ersetzen Sie die TextField-tag mit den benutzerdefinierten TextFieldLimited.
Innerhalb der controller-Klasse,
auf der Oberseite (property-Deklaration),
@FXML
private TextFieldLimited usernameTxtField;
innerhalb der initialize-Methode,
usernameTxtField.setLimit(40);
Das ist alles.
getText
vor - Einstellung oder den Ersatz von dem text? Klingt falsch für mich. Haben Sie diese getestet mit C&P?Ich wollte anfügen, neue Zeichen-Eingabe in das TextField, nur wenn die Länge des Textes wird nicht mehr als maxlength. Deshalb bin ich zuerst zu überprüfen, wenn die Länge erreicht hat, maxlength und dann habe ich anfügen, mit dem neuen Charakter. Das falsche Teil ist vorhanden, wenn der Benutzer klickt auf delete oder backspace. Ich update den code für, die. Auch ich update replaceSelection () - Methode, um zu verhindern, dass TextField zu überschreiten, maxlength, wenn der Benutzer fügt den text, die Länge, die in Ergänzung mit den bereits bestehenden text, ist mehr als maxlength Zeichen. Ich habe das getestet und es funktioniert einwandfrei.
InformationsquelleAutor George Siggouroglou
Ich bin ein einfacher Weg, um sowohl die Anzahl der Zeichen begrenzen und zwingen, numerische Eingabe:
java.lang.IndexOutOfBoundsException
wenn Sie geben Sie über diemaxLength
und versuchen, Sie zu verwenden Standard-system Rückgängig machen.Guter Punkt - ich bin auch mit einer Technik, wie nun so aus: stackoverflow.com/questions/13562712/...
Eröffnete ich meine eigene Frage bezüglich dieses Rückgängig machen Fehler. Siehe stackoverflow.com/questions/19184305/... für eine ziemlich gute Lösung.
InformationsquelleAutor hemisphire
Dieser Methode lassen TextField, alle fertig Verarbeitung (kopieren/einfügen/rückgängig sicher).
Nicht requares, um die Erweiterung Klasse.
Und damit Sie entscheidet, was zu tun mit neuen text nach jeder änderung
(schieben Sie es auf Logik, oder schalten Sie zurück zum vorherigen Wert, oder sogar, um es zu ändern).
Für Ihren Fall fügen Sie einfach diese Logik innerhalb. Funktioniert perfekt.
InformationsquelleAutor gmatagmis
Den code unten re-positionieren Sie den cursor, so dass der Benutzer nicht versehentlich überschreiben Sie Ihre Eingabe.
InformationsquelleAutor Javier Velasquez
Ich habe dieses Stück code, das erlaubt nur zahlen und Grenzwerte die Eingabe der Länge auf ein text-Feld in Javafx.
InformationsquelleAutor Eddy Zavala