Empfohlene Methode zum einschränken des Eingangs in die JavaFX-textfield
Mag es scheinen, die Frage ist das doppelte von diese. Aber meine Frage ist ich entwickelt haben, die ein integer textfield-Objekt in JavaFX von zwei Möglichkeiten. Der code ist unten angegeben
public class FXNDigitsField extends TextField
{
private long m_digit;
public FXNDigitsField()
{
super();
}
public FXNDigitsField(long number)
{
super();
this.m_digit = number;
onInitialization();
}
private void onInitialization()
{
setText(Long.toString(this.m_digit));
}
@Override
public void replaceText(int startIndex, int endIndex, String text)
{
if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
super.replaceText(startIndex, endIndex, text);
}
}
@Override
public void replaceSelection(String text)
{
if (text.matches(Constants.DIGITS_PATTERN) || text.equals(Constants.EMPTY_STRING)) {
super.replaceSelection(text);
}
}
}
Und der zweite Weg ist, indem ein event-Filter.
Den code-snippet gegeben wird.
//restrict key input to numerals.
this.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
@Override public void handle(KeyEvent keyEvent) {
if (!"0123456789".contains(keyEvent.getCharacter())) {
keyEvent.consume();
}
}
});
Meine Frage ist was ist der verleumdet Weg, dies zu tun? Kann mir jemand helfen, pick-up die richtige?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den besten Weg, um die Validierung in TextField ist ein 3. Weg.
Mit dieser Methode können TextField alle fertig Verarbeitung (kopieren/einfügen/rückgängig sicher).
Es ist nicht erforderlich, zu erweitern, der TextField-Klasse.
Und es ermöglicht Ihnen, zu entscheiden, was zu tun mit neuen text nach jeder änderung
(Grenzen der Logik, oder schalten Sie zurück zum vorherigen Wert, oder sogar, um es zu ändern).
TextFormatter
Klasse von JavaFX.Sowohl In Ihrer Art, Sie sind nicht erlaubt, um zu geben Zeichen, die dann numerische Zeichen. Aber es wird zulassen, fügen Sie beliebige Figur (Kopieren Sie Text aus einer beliebigen Quelle und Einfügen in Ihre TextField).
Einem guten Weg, das zu tun-Validierung wird nach dem Absenden,
Wie (Für Ganzzahlen):
(oder Sie können eine beliebige Kombination von Ihnen + der oben genannten Methode)
JavaFX hat eine Klasse TextFormatter für diesen use-case.
Es ermöglicht Ihnen, zu überprüfen und passen Sie die text-Inhalte, bevor es "engagiert", um die
textProperty
desTextField
.Diesem Beispiel sehen:
Ähnlich, was
Manuel Mauky
gepostet, aber ingroovy
ist:Hinweis: Dies wird verhindern, dass andere Zeichen außer Ziffern eingegeben werden.
Gibt es wohl einen kürzeren Weg, es zu tun in groovy. Wenn Ihr es wisst, bitte hier posten.