In my Swing application, the user must insert numbers and values, before switching to the next window. Now as a clean program should, I check every input if its valid or not
I prefer to use an improved version of JFormattedTextField. By improved I mean better caret behavior, validation on each change to provide immediate user feedback (e.g. change background color when input is invalid), ... . That combined with a button which is disabled until the input is valid.
Main benefits over the "click the button and see error messages appear":
InputVerifier which just avoids changing focusFormats (for dates, doubles, integers, ranges, ... ) and you can handle almost any situationFormats, easy adjustable for different LocalesJFormattedTextField. All the parsing code is contained in the format, and you can simply use JFormattedTextField#getValueJFormattedTextField. You know that the value you retrieve using getValue is a valid oneYou can get real time validation through the use a DocumentFilter
You check out this and this for some examples.
I do think, however, you might find the JFormattedTextField are more suitable solution in this case.
There are many things you can do. A simple one is to have a method that checks a list of strings for parseability into int. For additional checks you'd have more methods that check some typical thing, like number range. So split each kind of check into its own method and compose them as needed.
Otherwise there are full validation frameworks that handle this sort of thing. They are easiliy googlable, I'd say.
One solution would be to use Swing's InputVerifier to validate input for every JTextField used. As the validation functionality is the same for each field, a single instance could be used for all components:
public class MyNumericVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
try {
Integer.parseInt(text);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}
InputVerifier verifier = new MyNumericVerifier()
textField1.setInputVerifier(verifier);