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

时间:2011-09-29 19:14:01

标签: java swing user-interface jtextfield keylistener

我试图检查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)");
     }
   }
}

它实际上几乎完美地工作。但是,如果我使用CTRL + V粘贴一些东西,我必须在KeyListener注册字符串不同之前再键入两个字符(而不是一个)!那么有人知道为什么会这样吗?

很抱歉,如果我错过了任何细节 - 我试图尽可能地简短而简洁地发帖;所以请不要犹豫,不要问任何事......

1 个答案:

答案 0 :(得分:7)

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