Remplacer valeur JTextField par nouvelle
Fermé
Balthazar2
Messages postés
138
Date d'inscription
mardi 16 octobre 2012
Statut
Membre
Dernière intervention
29 janvier 2016
-
4 mai 2013 à 14:42
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 5 mai 2013 à 17:22
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 5 mai 2013 à 17:22
A voir également:
- Remplacer valeur JTextField par nouvelle
- Darkino nouvelle adresse - Guide
- Remplacer disque dur par ssd - Guide
- Flixcord nouvelle adresse - Guide
- Remplacer par word - Guide
- Yggtorrent nouvelle adresse - Guide
3 réponses
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
4 mai 2013 à 22:39
4 mai 2013 à 22:39
Tu devrais faire une petite classe qui hérite de JTextField mais en ajoutant un KeyListener qui va détecter chaque appui sur une touche.
Je généralises dans le cas où ta limite serait n'importe quel entier : avant que la lettre entrée ne soit ajoutée au texte, tu supprimes la dernière lettre du texte avec un substring, comme ça quand la lettre tapée est ajoutée elle remplace la dernière du champ texte et ça fait ce qu'il faut :
Exemple :
Je généralises dans le cas où ta limite serait n'importe quel entier : avant que la lettre entrée ne soit ajoutée au texte, tu supprimes la dernière lettre du texte avec un substring, comme ça quand la lettre tapée est ajoutée elle remplace la dernière du champ texte et ça fait ce qu'il faut :
Exemple :
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JTextField; public class JTextFieldLimit extends JTextField { private static final long serialVersionUID = 1; public JTextFieldLimit(final int limit) { if (limit>0) { addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { String text = getText(); if (text.length()>=limit) setText(text.substring(0, limit-1)); } public void keyPressed(KeyEvent e) {} public void keyReleased(KeyEvent e) {} }); } } /* public static void main(String[] args) { javax.swing.JFrame frame = new javax.swing.JFrame(); JTextField field = new JTextFieldLimit(5); frame.add(field); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); } */ }
Balthazar2
Messages postés
138
Date d'inscription
mardi 16 octobre 2012
Statut
Membre
Dernière intervention
29 janvier 2016
2
5 mai 2013 à 16:03
5 mai 2013 à 16:03
Salut, merci pour ta réponse ça fonctionne très bien, quand on ne se soucis pas de quel type de caractère est la touche que l'on presse, mais comment savoir si la touche est une lettre ou pas ?
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
5 mai 2013 à 17:22
5 mai 2013 à 17:22
C'est à cela que sert l'objet "KeyEvent e" en paramètre des 3 méthodes, ça te permet d'avoir le détail de l'évènement (l'appui sur une touche) qui a provoqué l'appel de la méthode.
Par exemple pour tester si le caractère est une lettre tu pourrais faire :
Remarque : la notion de caractères n'a de sens que dans la méthode keyTyped que j'ai utilisé, dans les deux autres méthodes on utilisera plutôt la notion de touche appuyée (ou relâchée) en testant la valeur de e.getKeyCode. Par exemple avant d'obtenir un caractère 'ê' on aura d'abord appuyé puis relâché la touche '^' puis appuyé la touche 'e', alors que pour le caractère 'E' on aura appuyé sur la touche "shift", appuyé sur la touche 'e' et ensuite relâchées les touches 'e' et 'shift'.
Pour certains traitements il est donc nécessaire d'utiliser les 3 méthodes en parallèle.
Par exemple pour tester si le caractère est une lettre tu pourrais faire :
if (Character.isLetter(e.getKeyChar()))
Remarque : la notion de caractères n'a de sens que dans la méthode keyTyped que j'ai utilisé, dans les deux autres méthodes on utilisera plutôt la notion de touche appuyée (ou relâchée) en testant la valeur de e.getKeyCode. Par exemple avant d'obtenir un caractère 'ê' on aura d'abord appuyé puis relâché la touche '^' puis appuyé la touche 'e', alors que pour le caractère 'E' on aura appuyé sur la touche "shift", appuyé sur la touche 'e' et ensuite relâchées les touches 'e' et 'shift'.
Pour certains traitements il est donc nécessaire d'utiliser les 3 méthodes en parallèle.
Balthazar2
Messages postés
138
Date d'inscription
mardi 16 octobre 2012
Statut
Membre
Dernière intervention
29 janvier 2016
2
Modifié par Balthazar2 le 5/05/2013 à 18:07
Modifié par Balthazar2 le 5/05/2013 à 18:07
J'ai réussi en combinant les 2 classes :)
Celle qui hérite de plainDocument qui insert seulement si c'est une lettre
Celle qui hérite de JTextField qui s'occupe de fixer la limite et de remplacer si j'appuie sur une autre lettre
Celle qui hérite de plainDocument qui insert seulement si c'est une lettre
Celle qui hérite de JTextField qui s'occupe de fixer la limite et de remplacer si j'appuie sur une autre lettre