Perhaps you want to use a DocumentFilter, not a DocumentListener. The former will allow the code to get attempted changes to the Document before they occur, which I believe is what you want.
Using AsYouTypeFormatter with JTextField
-
11-03-2022 - |
Question
I want to use the AsYouTypeFormatter from LibPhoneNumber (http://code.google.com/p/libphonenumber/) with a JTextField to format a phone number. However, I cannot use a document listener to change the text in the JTextField and an ActionListener will only work when the mouse is clicked. All the other questions I have seen involve using the AsYouTypeFormatter for Android, but I am making a desktop application.
phoneUtil = PhoneNumberUtil.getInstance();
formatter = phoneUtil.getAsYouTypeFormatter("US");
addPhoneF = new JTextField(20);
addPhoneF.getDocument().addDocumentListener(this);
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String unformattedNumber = addPhoneF.getText();
String formattedNumber = "";
for (int i = 0; i<unformattedNumber.length() - 1; i++) {
formattedNumber += formatter.inputDigit(unformattedNumber.charAt(i));
}
addPhoneF.setText(formattedNumber);
}
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String unformattedNumber = addPhoneF.getText();
String formattedNumber = "";
for (int i = 0; i<unformattedNumber.length() - 1; i++) {
formattedNumber += formatter.inputDigit(unformattedNumber.charAt(i));
}
addPhoneF.setText(formattedNumber);
}
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
String unformattedNumber = addPhoneF.getText();
String formattedNumber = "";
for (int i = 0; i<unformattedNumber.length() - 1; i++) {
formattedNumber += formatter.inputDigit(unformattedNumber.charAt(i));
}
addPhoneF.setText(formattedNumber);
}
Solution
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow