2013-11-14 69 views
0

我有一個textfield,在其中我必須驗證一個Email.My問題是我只想在電子郵件有效時從文本字段移動焦點。我現在正在使用FocusAdapter。 有人可以給我一些其他的想法嗎?在JTextField上添加FocusListener

+4

我討厭有一個行爲這樣一個程序來工作。例如。我坐在一個有30個領域的屏幕前,並且知道其中29個的值,但第30個是我從我的同事那裏得到的電子郵件地址,他們已經從外面冒出來冒煙。爲什麼限制我輸入我知道的29個領域的細節? *「..給我一些其他的想法?」*當操作員***試圖保存信息時驗證所有字段***如果有需要修復的字段,請彈出一個模式對話框,解釋所需的數據並放下它們回到形式,以領域爲重點。 –

回答

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; 
} 
+0

我已驗證了Email.My的問題是:當我在TextField中輸入一些無效的電子郵件,並將鼠標移動到另一個組件上時,我需要鼠標才能夠做到這一點,但要留在同一個Textfield中直到電子郵件有效。 – Laura

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()How to Use the Focus Subsystem

3

javax.swing.InputVerifierJComponent.setInputVerifier() 但不要忘了從安德魯的建議。您的工作流程不方便用戶使用。

有人已經在這裏描述:Java - making a textbox not lose focus