5 votes

L'écouteur de clé de JTextField est en retard d'une unité après le collage.

J'essaie de vérifier que le texte d'un JTextField correspond à un modèle particulier, et si c'est le cas / ne l'est pas, d'afficher un message à l'utilisateur. Voici ce que j'ai fait jusqu'à présent :

 public class input extends KeyListener{
// Some code here
final JTextField inputField = new JTextField(35);
// Some more code...
   public void generate(){
      // Some GUI code here...
     inputField.addKeyListener(this);
   }
   public void keyPressed(KeyEvent e) {}
   public void keyReleased(KeyEvent e) {}
   public void keyTyped(KeyEvent e) {
      if(e.getSource() instanceof JTextField && e.getSource().equals(inputField)){
         if(Pattern.matches("../../....", (JTextComponent) e.getSource()).getText())))
             System.out.println("Yh, it works");
         else System.out.println("EPIC FAIL (LOL)");
     }
   }
}

Et en fait, cela fonctionne presque parfaitement. Cependant, si je colle quelque chose en utilisant CTRL + V, je dois taper deux caractères supplémentaires (au lieu d'un seul) avant que le KeyListener n'enregistre que la chaîne est différente ! Quelqu'un a-t-il une idée de la raison ?

Désolé si j'ai omis des détails - j'ai essayé de rendre ce post aussi court et concis que possible ; alors n'hésitez pas à demander quoi que ce soit...

8voto

Hovercraft Full Of Eels Points 161146

Tout d'abord, n'utilisez pas un KeyListener pour ce type de problème, car il est voué à l'échec et, même si vous parvenez à le faire fonctionner, il s'agit au mieux d'un bricolage. À la place, j'utiliserais soit un ActionListener si je voulais faire ma vérification après que l'utilisateur ait complètement fini de saisir les informations, soit un DocumentListener si je voulais vérifier l'entrée pendant que l'utilisateur saisit, mais sans bloquer cette entrée ni modifier le texte affiché, soit un Document Filter si je voulais vérifier l'entrée pendant que l'utilisateur saisit et la bloquer ou la modifier si elle n'est pas appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X