【发布时间】:2013-09-10 05:52:57
【问题描述】:
我正在使用 LostFocus 事件验证两个文本字段,如下所示:
textRegNo.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
regNo1=textRegNo.getText();
Pattern pattern1 = Pattern.compile("^[A-Z]{2}[ -][0-9]{1,2}(?: [A-Z])?(?: [A-Z]*)? [0-9]{4}$");
Matcher matcher1 = pattern1.matcher(regNo1);
if (!matcher1.find()){
JOptionPane.showMessageDialog(null, "Invalid Vehicle No!!!\n Vehicle no should be of the form MH 03 KS 2131!!");
}
}
@Override
public void focusGained(FocusEvent arg0) {
// TODO Auto-generated method stub
};
});
textMobNo.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent arg0) {
// TODO Auto-generated method stub
mobNo1=textMobNo.getText();
Pattern pattern2 = Pattern.compile("^[789]\\d{9}$");
Matcher matcher2 = pattern2.matcher(mobNo1);
System.out.println("'"+mobNo1+"'");
if (!matcher2.find()){
JOptionPane.showMessageDialog(null, "Phone no must be a 10 digit number!!");
}
}
@Override
public void focusGained(FocusEvent arg0) {
// TODO Auto-generated method stub
};
});
我的问题是,当我失去对第一个文本字段的关注并将焦点移动到第二个文本字段时,两个字段都会打印错误消息(两个 lostfocus 事件下的 IF 块内的 MESSAGE。) 当我在第一个文本字段中输入错误并将焦点移动到第二个字段时,它应该只打印第一个文本字段的错误消息。但两者的打印错误。
第一个文本字段是 textRegNo 第二个文本字段是 textMobNo
【问题讨论】:
-
尝试使用
InputVerifier代替焦点监听器来验证字段... -
问题的症状围绕着这个过程。
textMobNo获得焦点,导致textRegNo失去焦点,textRegNo被验证并发现无效,textRegNo现在显示错误消息...textMobNo失去焦点(因为对话框获得焦点) -
您能就您刚才解释的问题提出任何解决方案吗?欣赏!
-
是的,使用
InputVerifer,这就是他们的目的...... -
好的!我会看看!感谢您的帮助!
标签: java regex swing validation lostfocus