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);
}
Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top