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).
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
Vous devez vous connecter pour publier un commentaire.
la meilleure façon est :
Meilleur de la chance.
OriginalL'auteur MagicJ
Voici mon arrivée, deux filtres d'événement, pourrait être, dans mon cas je les ai utilisés dans les différentes situations, c'est pourquoi il y a deux.
Ici est la maxValueFilter (en spanglish xD), c'est une classe:
Et l'autre événement de filtre (filtres de caractères), il s'agit d'une méthode:
l'utilisation dans votre cas, serait:
OriginalL'auteur Magcus
Solution finale. Interdit alphabétique et de caractères spéciaux et applique la limite de caractères.
OriginalL'auteur Damienknight
J'ai simplement mis la Clé Tapé " événement pour exécuter cette petite procédure:
Il fonctionne comme un champion!
OriginalL'auteur Michael Sims
J'ai créé sur mesure un Champ de texte qui peut être ajouté à Java Générateur de FX ("importer JAR/FXML fichier...').
Avec ce Champ peut être défini
De cours peut être improoved, mais c'est très utile.
Espérons que cela va aider quelqu'un 🙂
FX Projet LimitedTextField
Avec ce projet, peut être la création de l'LimitedTextField.jar' le fichier à importer dans votre application ou dans java générateur de FX.
CustomControlExample.java
custom_control.fxml
LimitedTextField.java
Exemple d'utilisation:
MyFxmlApplication.fxml
MyFxmlApplicationController.fxml
bye
OriginalL'auteur Matteo
D'essayer cette solution ajouter cette fonction dans votre contrôleur , vous devez l'ajouter sur le keyPressed Action de votre champ de texte.
OriginalL'auteur