Peut on spécifier la longueur maximum de la saisie dans un showInputDialog ?
Merci
Peut on spécifier la longueur maximum de la saisie dans un showInputDialog ?
Merci
Comme le résultat est un objet String j'aurais tendance a dire : longeur illimité
mais le mieux est d'essayer.
Systèmes d'Informations Géographiques
- Projets : Unlicense.science - Apache.SIS
Pour un monde sans BigBrother IxQuick ni censure RSF et Les moutons
je voudrais en fait que le curseur soit bloqué au bout de 9 caractères (c'est un numéro de SIREN). Je fais deja le controle après pour vérifier la taille mais je voudrais le faire au moment de la saisie...
Une piste peut être:
Sais tu récupérer le textfield et mettre un listener "keypressed" dessus qui annule la frappe si la taille > 9
oué effectivement mais comment
Salut,
Une manière de limiter la taille d'un JTextField est d'utiliser un DocumentFilter, et de redéfinir ses méthodes afin de bloquer lorsqu'on dépasse le nombre de caractère, par exemple :
Mais on n'a malheureusement pas accès au JTextField du JOptionPane... C'est pourquoi il faut utiliser showOptionPane() et créer de toutes parts la boite de dialogue, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 public class SizeDocumentFilter extends DocumentFilter { private final int maxLength; public SizeDocumentFilter(int maxLength) { this.maxLength = maxLength; } @Override public void insertString(FilterBypass fb, int offset, String text, AttributeSet attrs) throws BadLocationException { // Calcul du nombre de caractère qu'il est encore possible d'ajouter : int len = this.maxLength - fb.getDocument().getLength(); if (len <= 0) { // Beep car déja complet Toolkit.getDefaultToolkit().beep(); } else { if (len < text.length()) { // on tronque la chaine si elle est trop grande : text = text.substring(0, len); // Beep car chaine tronqué Toolkit.getDefaultToolkit().beep(); } // Puis on insert la chaine : fb.insertString(offset, text, attrs); } } @Override public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { // Calcul du nombre de caractère qu'il est encore possible d'ajouter // (après avoir enlévé les eventuelles caractères remplacés) : int len = this.maxLength + length - fb.getDocument().getLength(); if (len <= 0) { // Beep car déja complet Toolkit.getDefaultToolkit().beep(); } else { if (len < text.length()) { // on tronque la chaine si elle est trop grande : text = text.substring(0, len); // Beep car chaine tronqué Toolkit.getDefaultToolkit().beep(); } // Puis on effectue le remplacement fb.replace(offset, length, text, attrs); } } }
Mais il y a un défaut : le JTextField n'a pas le focus par défaut...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public static String showInputDialog(Component parentComponent, Object message, int maxlen) throws HeadlessException { // On récupère la locale du composant parent (ou celle par défaut) : Locale locale = (parentComponent == null) ? Locale.getDefault() : parentComponent.getLocale(); // On crée un Document auquel on associe le filtre : PlainDocument doc = new PlainDocument(); doc.setDocumentFilter(new SizeDocumentFilter(maxlen)); // On crée le JTextField de saisie : final JTextField textField = new JTextField(doc, null, 0); // On affiche la boite de dialogue int ret = JOptionPane.showOptionDialog( parentComponent, // Composant parent new Object[] { message, textField }, // Contenu de la BdD UIManager.getString("OptionPane.inputDialogTitle",locale), // Titre de la BdD JOptionPane.OK_CANCEL_OPTION, // Bouton OK/Cancel JOptionPane.QUESTION_MESSAGE, // Style "Question" null, null, null); // Si on a cliqué sur OK on retourne le texte if (ret == JOptionPane.OK_OPTION) { return textField.getText(); } // Sinon on retourne null return null; }
Si quelqu'un a une solution pour ca
a++
un thread qui date quelque peu, mais bon, si ca peut aider.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 final JTextField textField = new JTextField(doc, null, 0){ boolean init = false; public void paint(Graphics g) { super.paint(g); if (!init){ init = true; this.requestFocus(); } } };
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager