开发者

JTextField key listener is one behind after pasting

开发者 https://www.devze.com 2023-04-10 02:17 出处:网络
I am trying to check that the text in a JTextField matches aperticular pattern, and if it does / doesn\'t display a message the user. This is 开发者_开发技巧what I have so far:

I am trying to check that the text in a JTextField matches a perticular pattern, and if it does / doesn't display a message the user. This is 开发者_开发技巧what I have so far:

 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)");
     }
   }
}

And it does actually work almost perfectly. However, if I paste something using CTRL + V, I have to type two more characters (as opposed to one) before the KeyListener registers that the string is different! So does any one have any idea's why?

Sorry if I have missed out any details - I have tried to make the post as short and concise as possible; so please don't hesitate to ask anything...


For starters, don't use a KeyListener for this type of problem as it is doomed to fail, and even if you get it to work, it's a kludge at best. Instead I'd use either an ActionListener if I wanted to do my checking after the user is completely done entering information, or a DocumentListener if I want to check input as a user is entering, but am not going to block that entering or change the displayed text, or a Document Filter if I'm going to check the input as the user is entering and block it or change it if it is not appropriate.

0

精彩评论

暂无评论...
验证码 换一张
取 消