Java 将AsyOutTypeFormatter与JTextField一起使用
我想使用LibPhoneNumber中的AsYouTypeFormatter和JTextField来格式化电话号码。但是,我不能使用文档侦听器来更改JTextField中的文本,ActionListener只能在单击鼠标时工作。我看到的所有其他问题都涉及到使用Android的AsyoTypeFormatter,但我正在制作一个桌面应用程序Java 将AsyOutTypeFormatter与JTextField一起使用,java,swing,jtextfield,documentfilter,libphonenumber,Java,Swing,Jtextfield,Documentfilter,Libphonenumber,我想使用LibPhoneNumber中的AsYouTypeFormatter和JTextField来格式化电话号码。但是,我不能使用文档侦听器来更改JTextField中的文本,ActionListener只能在单击鼠标时工作。我看到的所有其他问题都涉及到使用Android的AsyoTypeFormatter,但我正在制作一个桌面应用程序 phoneUtil = PhoneNumberUtil.getInstance(); formatter = phoneUtil.getAsYouTypeFo
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);
}
也许您想使用DocumentFilter,而不是DocumentListener。前者允许代码在文档发生更改之前获取对文档的尝试更改,我相信这正是您想要的。也许您想要使用的是DocumentFilter,而不是DocumentListener。前者允许代码在文档发生更改之前尝试对文档进行更改,我相信这正是您想要的。我不知道如何使用DocumentFilter。Cass:在这个网站上有很多关于如何使用DocumentFilter的示例,很多都是我写的,我建议你搜索这个网站,看看它们。@HovercraftFullOfEels我已经看过了这些,并创建了DocumentFilter的一个子类,但我仍然不知道如何使用AsyOutTypeFormatter。我没有AsyOutTypeFormatter,所以我不能自己测试它,但是DocumentFilter的主要优点是,它可以在文档写入文档之前检测对文档所做的更改,从而允许您更改或过滤这些更改,然后更新文档。听起来好像这就是你需要的。是的,比如说,看。字符串文本方法参数将包含当前的预更新文本。我不知道如何使用DocumentFilter。卡斯:在这个网站上有很多关于如何使用DocumentFilter的示例,很多都是我写的,我建议你搜索这个网站,看看它们。@HovercraftFullOfEels我已经看过了这些,并创建了DocumentFilter的一个子类,但我仍然不知道如何使用AsyOutTypeFormatter。我没有AsyOutTypeFormatter,所以我不能自己测试它,但是DocumentFilter的主要优点是,它可以在文档写入文档之前检测对文档所做的更改,从而允许您更改或过滤这些更改,然后更新文档。听起来好像这就是你需要的。是的,比如说,看。字符串文本方法参数将具有当前的更新前文本。