1

我想使用 LibPhoneNumber ( http://code.google.com/p/libphonenumber/ ) 中的 AsYouTypeFormatter 和 JTextField 来格式化电话号码。但是,我不能使用文档侦听器来更改 JTextField 中的文本,并且 ActionListener 仅在单击鼠标时才起作用。我看到的所有其他问题都涉及使用适用于 Android 的 AsYouTypeFormatter,但我正在制作一个桌面应用程序。

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);
}
4

1 回答 1

4

也许您想使用 DocumentFilter,而不是 DocumentListener。前者将允许代码在发生之前尝试对 Document 进行更改,我相信这就是您想要的。

于 2013-02-23T01:57:18.363 回答