Validating a JTextField When Permanently Losing the Focus

This example demonstrates a text field that validates its contents when it receives a permanent focus-lost event. If the contents are invalid, it displays a modal dialog with an error message and regains the focus.
JTextField component = new JTextField(10); component.addFocusListener(new MyFocusListener()); public class MyFocusListener extends FocusAdapter { boolean showingDialog = false; public void focusGained(FocusEvent evt) { final JTextComponent c = (JTextComponent)evt.getSource(); String s = c.getText(); // Position the caret at the 1st non-digit character for (int i=0; i<s.length(); i++) { // Ensure validity if (!Character.isDigit(s.charAt(i))) { c.setSelectionStart(i); c.setSelectionEnd(i); break; } } } public void focusLost(FocusEvent evt) { final JTextComponent c = (JTextComponent)evt.getSource(); String s = c.getText(); if (evt.isTemporary()) { return; } for (int i=0; i<s.length(); i++) { // Ensure validity if (!Character.isDigit(s.charAt(i))) { // Find top-level window Component par = c; while (par.getParent() != null) { par = par.getParent(); } final Frame frame = (Frame)par; // Create and display an error message JOptionPane optionPane = new JOptionPane("The value must only contain digits", JOptionPane.ERROR_MESSAGE, JOptionPane.DEFAULT_OPTION); optionPane.createDialog(frame, null).show(); // Regain the focus c.requestFocus(); break; } } } }

Post a comment

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image. Ignore spaces and be careful about upper and lower case.