粘贴后,JTextField键监听器就落后了

And*_*ndy 4 java user-interface swing keylistener jtextfield

我试图检查JTextField中的文本是否匹配特定模式,如果它确实/不显示用户的消息.这是我到目前为止:

 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)");
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

它实际上几乎完美地工作.但是,如果我使用CTRL + V粘贴一些东西,我必须在KeyListener注册字符串不同之前再键入两个字符(而不是一个)!那么任何人都有任何想法的原因吗?

对不起,如果我错过了任何细节 - 我试图尽可能地简短和简洁; 所以请不要犹豫,不要问任何事情......

Hov*_*els 7

对于初学者来说,不要使用KeyListener来解决这类问题,因为它注定要失败,即使你让它发挥作用,它也是最好的问题.相反,如果我想在用户完全输入信息后进行检查,则使用ActionListener;如果我想在用户输入时检查输入,则使用DocumentListener,但不会阻止输入或更改显示文本或文档过滤器,如果我要在用户输入时检查输入并阻止它或在不合适时更改它.