2013-11-14 3 views
0

У меня есть текстовое поле, в котором я должен проверять электронную почту. Моя проблема заключается в том, что я хочу переместить фокус из текстового поля только тогда, когда письмо является действительным. Я использую теперь FocusAdapter. Может кто-нибудь, пожалуйста, дайте мне другую идею?Добавить FocusListener на JTextField

+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

Я проверял электронную почту. Моя проблема: когда я печатаю несколько недействительных сообщений электронной почты в 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.InputVerifier Смотрите и JComponent.setInputVerifier() Но не стоит забывать предложение от Андрея. Ваш рабочий процесс не является удобным для пользователя.

Это было уже описано здесь: Java - making a textbox not lose focus

Смежные вопросы