0

我有一个文本字段,我必须在其中验证电子邮件。我的问题是我只想在电子邮件有效时才将焦点从文本字段中移动。我现在使用的是 FocusAdapter。有人可以给我一些其他的想法吗?

4

3 回答 3

3

请参阅javax.swing.InputVerifierJComponent.setInputVerifier() 但不要忘记 Andrew 的建议。您的工作流程对用户不友好。

这里已经描述过:Java - 使文本框不会失去焦点

于 2013-11-14T11:48:57.330 回答
0

在下一个示例中,如果验证失败,您将无法移动到另一个字段,在requestFocusInWindow()方法的帮助下完成。试试吧,我认为它可以帮助你:

public class Frame extends JFrame {

    private JTextField f;
    private JTextField f2;
    private JTextField f3;

    public Frame() {
        f = new JTextField(5);
        f2 = new JTextField(5);
        f3 = new JTextField(5);
        f.addFocusListener(getFocusListener());
        getContentPane().setLayout(new GridLayout(3,1,5,5));
        getContentPane().add(f);
        getContentPane().add(f2);
        getContentPane().add(f3);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private FocusListener getFocusListener() {
        return new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent arg0) {
                super.focusLost(arg0);
                if(!validateEmail()){
                    f.requestFocusInWindow();
                }
            }
        };
    }

    private boolean validateEmail() {
        return f.getText().length()<3;
    }

    public static void main(String args[]) {
        new Frame();

    }

}

阅读有关requestFocusInWindow()如何使用焦点子系统的更多信息

于 2013-11-14T11:23:59.767 回答
0

尝试这个:

public static boolean isValidEmailAddress(String email)
{
   boolean result=true;
   try
   {
      InternetAddress emailAddr=new InternetAddress(email);
      emailAddr.validate();
   } catch(AddressException ex)
   {
      result=false;
   }
   return result;
}
于 2013-11-14T11:16:49.290 回答