У меня есть текстовое поле, в котором я должен проверять электронную почту. Моя проблема заключается в том, что я хочу переместить фокус из текстового поля только тогда, когда письмо является действительным. Я использую теперь FocusAdapter. Может кто-нибудь, пожалуйста, дайте мне другую идею?Добавить FocusListener на JTextField
ответ
Попробуйте это:
public static boolean isValidEmailAddress(String email)
{
boolean result=true;
try
{
InternetAddress emailAddr=new InternetAddress(email);
emailAddr.validate();
} catch(AddressException ex)
{
result=false;
}
return result;
}
Я проверял электронную почту. Моя проблема: когда я печатаю несколько недействительных сообщений электронной почты в TextField, и я перемещаю мышь на другой компонент, мне нужно, чтобы мы не могли это сделать, но чтобы оставаться на том же текстовом поле пока письмо не будет действительным. – Laura
В следующем примере вы не можете перейти в другое поле, если проверка не удалась, сделано с помощью метода 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
javax.swing.InputVerifier
Смотрите и JComponent.setInputVerifier()
Но не стоит забывать предложение от Андрея. Ваш рабочий процесс не является удобным для пользователя.
Это было уже описано здесь: Java - making a textbox not lose focus
- 1. FocusListener на JTextField не работает
- 2. FocusListener & JOptionPane
- 3. Проблемы с FocusListener
- 4. Java вызов «addActionListener» из «FocusListener»
- 5. Java: Добавить место на JTextField
- 6. Ошибка в Java с FocusListener
- 7. FocusListener не работает на Mac
- 8. Это правильный способ добавить FocusListener в JTextFields в java?
- 9. Добавить JTextField в OverlayLayout
- 10. Добавить текст в JTextField
- 11. Проблемы в FocusListener-Swing
- 12. «добавить» текст для JTextField
- 13. Добавить массив в JTextField
- 14. Добавить значение в JTextField?
- 15. Добавить JTextField в JToolBar
- 16. Изменить текст сфокусированного JTextField
- 17. FocusListener on editable JCombobox не срабатывает
- 18. Невозможно добавить JFrame и JTextField
- 19. JTextField - изменение положения каретки на событии focusLost
- 20. Java ActionCommand эквивалент для FocusListener
- 21. Конфликт между VerifyListener и FocusListener
- 22. Добавить JTextField в новом JFrame
- 23. Как добавить дополнение к jtextfield
- 24. Невозможно добавить JTextField в JFrame
- 25. Невозможно добавить JTextfield в JPanel
- 26. Можно добавить JTextField в JLabel?
- 27. Как добавить JList с JTextField
- 28. MVC реализация Java Swing FocusListener
- 29. Два KeyListeners на JTextField
- 30. Java JTextfield focus
Я не хотел бы, чтобы работать с программой, которая ведет себя таким образом. НАПРИМЕР. Я сижу перед экраном с 30 полями и знаю значения 29 из них, но 30-й - это адрес электронной почты, который мне нужно получить от моего коллеги, который выскочил наружу, за дым. Зачем мне вводить детали из 29 полей, которые я знаю? * «.. дайте мне другую идею?» * Подтвердите все поля, когда оператор *** пытается сохранить информацию. *** Если есть поля, которые нуждаются в исправлении, введите модальный диалог, объясняющий необходимые данные и отбросьте их обратно в форму, с фокусировкой на поле. –