Ключевой слушатель JTextField один позади после вставки - PullRequest
4 голосов
/ 29 сентября 2011

Я пытаюсь проверить, соответствует ли текст в 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 Ответ

7 голосов
/ 29 сентября 2011

Для начала, не используйте KeyListener для этого типа проблемы, так как он обречен на неудачу, и даже если вы заставите его работать, это в лучшем случае просто клочок.Вместо этого я бы использовал либо ActionListener, если я хочу выполнить свою проверку после того, как пользователь полностью завершил ввод информации, либо DocumentListener, если я хочу проверить ввод при входе пользователя, но не собираюсь блокировать этот ввод или изменятьотображаемый текст или фильтр документов, если я собираюсь проверить ввод при вводе пользователем и заблокировать его или изменить, если он не подходит.

...