Clavier de contrôle d'entrée dans javafx TextField

Je veux contrôler l'entrée dans une Javafx TextField pour que je puisse autoriser uniquement l'entrée Numérique, et de sorte que si le max de caractères sont dépassées, aucun changement ne sera apporté à la zone de texte.

edit: sur la Base d'une recommandation dans les commentaires, j'ai utilisé la méthode suggérée par le JavaFX chef de projet. Il fonctionne très bien pour arrêter les lettres d'être saisies. J'ai juste besoin de filtrer les caractères spéciaux. J'ai essayé de changer le filtre (le texte.de matchs("[0-9]"), mais qui ne permettent pas de retour arrière pour être entré.

edit2: Compris un filtre sur des caractères spéciaux et de la longueur. Voici mon code final. Merci pour les commentaires les gars.

Ici est la classe TextField j'ai créé:

import javafx.scene.control.TextField;

public class AttributeTextField extends TextField{

    public AttributeTextField() {
        setMinWidth(25);
        setMaxWidth(25);
    }

    public void replaceText(int start, int end, String text) {
        String oldValue = getText();
        if (!text.matches("[a-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {
            super.replaceText(start, end, text);
        }
        if (getText().length() > 2 ) {
            setText(oldValue);
        }
    }

    public void replaceSelection(String text) {
        String oldValue = getText();
        if (!text.matches("[a-z]") && !text.matches("[\\\\!\"#$%&()*+,./:;<=>?@\\[\\]^_{|}~]+")) {
            super.replaceSelection(text);
        }
        if (getText().length() > 2 ) {
            setText(oldValue);
        }
    }
}

Remarque: j'ai lu Quelle est la méthode recommandée pour faire un numérique TextField dans JavaFX? ce post, et cette solution ne fonctionne pas pour moi. Il ne s'déclenché après que le numéro a été saisi. Signification quelqu'un pourrait-type alphabétique du texte dans la boîte, et que cela permettrait à elle jusqu'à ce qu'ils déplacé le focus à partir de la zone de texte. Ils peuvent aussi entrer des nombres de plus de permis, mais la validation ne se fait pas sur chaque pression de touche, mais plutôt après le décalage de mise au point ('changé' événement).

Avez-vous tester mon IntField solution à la question et il l'a fait souffrir de tous les défauts que vous décrivez? Ce JavaFX version utilisez-vous? Ont été il y a d'autres problèmes avec cette solution? Ne Burkhard la solution a un problème? Note Burkhard la solution utilise la même technique que proposé par le JavaFX chef de projet.
Que le lien entre le chef de projet est grande. Je voudrais le modifier de sorte qu'il ne permet pas de caractères spéciaux. J'ai essayé de forcer 0-9 seulement, mais ensuite, c'était de ne pas laisser revenir en arrière et effacer. Je vais coller mon code mis à jour.
si vous avez créé votre propre solution qui semble la meilleure solution à votre question, vous n'avez pas besoin de mettre la solution dans la question, vous pouvez créer votre propre réponse et de mettre de la solution et la marque de la réponse correcte.

OriginalL'auteur Damienknight | 2013-10-03