You can create a class that extends DocumentFilter class and override methods insertString and replace so that:
- In insertString method it will call it's super, passing in one of the parameters
string.toLowerCase()
- In replace method it will call it's super, passing in one of the parameters
text.toLowerCase()
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
class LowerCaseDocumentFilter extends DocumentFilter {
@Override
public void insertString(final FilterBypass fb, final int offset, final String string, final AttributeSet attr) throws BadLocationException {
super.insertString(fb, offset, string.toLowerCase(), attr);
}
@Override
public void replace(final FilterBypass fb, final int offset, final int length, final String text, final AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, text.toLowerCase(), attrs);
}
}
then adds an instance of this class so that the JTextField will automatically convert to lower case:
class Main {
public static void main(String[]args) {
JFrame jFrame = new JFrame("Example");
jFrame.setSize(500, 500);
jFrame.setVisible(true);
JPanel jPanel = new JPanel();
jFrame.add(jPanel);
JTextField jTextField = new JTextField("Example JTextField");
((AbstractDocument)jTextField.getDocument()).setDocumentFilter(new LowerCaseDocumentFilter());
jPanel.add(jTextField);
jFrame.pack();
}
}
Source:
https://stackoverflow.com/a/11573312