Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将AsyOutTypeFormatter与JTextField一起使用_Java_Swing_Jtextfield_Documentfilter_Libphonenumber - Fatal编程技术网

Java 将AsyOutTypeFormatter与JTextField一起使用

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

我想使用LibPhoneNumber中的AsYouTypeFormatter和JTextField来格式化电话号码。但是,我不能使用文档侦听器来更改JTextField中的文本,ActionListener只能在单击鼠标时工作。我看到的所有其他问题都涉及到使用Android的AsyoTypeFormatter,但我正在制作一个桌面应用程序

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的主要优点是,它可以在文档写入文档之前检测对文档所做的更改,从而允许您更改或过滤这些更改,然后更新文档。听起来好像这就是你需要的。是的,比如说,看。字符串文本方法参数将具有当前的更新前文本。