Numérique TextField pour les Entiers en JavaFX 8 avec TextFormatter et/ou UnaryOperator

Je suis en train de créer un numérique TextField pour les Entiers à l'aide de la TextFormatter de JavaFX 8.

Solution avec UnaryOperator:

UnaryOperator<Change> integerFilter = change -> {
    String input = change.getText();
    if (input.matches("[0-9]*")) { 
        return change;
    }
    return null;
};

myNumericField.setTextFormatter(new TextFormatter<String>(integerFilter));

Solution avec IntegerStringConverter:

myNumericField.setTextFormatter(new TextFormatter<>(new IntegerStringConverter()));  

Les deux solutions ont leurs propres problèmes. Avec le UnaryOperator, je ne peut entrer que des chiffres de 0 à 9 comme prévu, mais j'ai aussi besoin d'entrer des valeurs négatives comme "-512", où le signe est seulement permis à la première position. Aussi je ne veux pas des chiffres comme "00016" ce qui est encore possible.

La IntegerStringConverter méthode qui fonctionne le mieux: Chaque numéro non valide comme "-16-123" n'est pas acceptée et les nombres tels que "0123" converties "123". Mais la conversion ne se produit que lorsque le texte est engagée (par l'intermédiaire de la touche entrée) ou lorsque le Champ de texte perd de sa pertinence.

Est-il un moyen de faire respecter la conversion de la seconde méthode avec le IntegerStringConverter chaque fois que la valeur du Champ est mis à jour?

OriginalL'auteur ShadowEagle | 2016-11-07