Limiter l'entrée JTextField à des entiers
La tâche consistant à restreindre l'entrée JTextField pour n'accepter que des entiers positifs est un besoin fréquemment rencontré, mais la mise en œuvre de cette restriction peut poser des défis. L'utilisation d'un KeyListener à cette fin, comme tenté initialement, présente plusieurs inconvénients.
Inconvénients de l'utilisation d'un KeyListener :
La solution : DocumentFilter
Une meilleure approche consiste à utiliser un DocumentFilter. Ce composant Swing vous permet de filtrer le contenu d'un composant texte, offrant un contrôle précis sur ce qui peut être saisi.
Comment ça marche :
Un DocumentFilter vous permet de inspectez toutes les modifications entrantes dans le contenu du composant texte. En vérifiant si la chaîne modifiée représente un entier valide, vous pouvez accepter ou rejeter la modification.
Exemple d'implémentation :
L'extrait de code suivant montre comment implémenter un DocumentFilter qui restreint la saisie aux entiers :
import javax.swing.text.DocumentFilter; import javax.swing.text.BadLocationException; public class MyIntFilter extends DocumentFilter { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { Document doc = fb.getDocument(); StringBuilder sb = new StringBuilder(); sb.append(doc.getText(0, doc.getLength())); sb.insert(offset, string); if (test(sb.toString())) { super.insertString(fb, offset, string, attr); } else { // Handle invalid input, e.g., display an error message } } private boolean test(String text) { try { Integer.parseInt(text); return true; } catch (NumberFormatException e) { return false; } } }
En attachant ce DocumentFilter à votre JTextField, vous pouvez vous assurer que seuls les entiers valides sont autorisés en entrée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!