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

おそらく、DocumentListener ではなく DocumentFilter を使用したいでしょう。前者は、コードが発生する前に Document への変更を試行できるようにします。これはあなたが望むものだと思います。

于 2013-02-23T01:57:18.363 に答える