これが私が必要とするものです: ユーザーが次のいずれかを入力できるテキストフィールド:
1234567890 または 11234567890
それに応じてフォーマットする必要があります
123-456-7890 または 1 123-456-7890
基本的に、国コードの有無にかかわらず電話番号です。これまでのところ、次のことを行うコードがあります。
if (isPhone && !getText().equals(BLANK_STRING)) {
int phoneLength = getText().replaceAll("[^0-9]", "").length();
String text = getText().replaceAll("[^0-9]", "");
//We call the method to format the entered text after we left the field
setPhoneFormatMask(phoneLength, text);
}
private void setPhoneFormatMask(int length, String text) {
System.out.println("length = " + length);
System.out.println("text = " + text);
switch (length) {
case 10:
try {
System.out.println("Setting mask");
numberMaskFormat.setMask("###-###-####");
} catch (ParseException ex) {
Logger.getLogger(WWNumericFormattedTextField.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 11:
try {
System.out.println("setting mask 2");
numberMaskFormat.setMask("# ###-###-####");
} catch (ParseException ex) {
Logger.getLogger(WWNumericFormattedTextField.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
setFormatter(numberMaskFormat);
System.out.println("n:" + numberMaskFormat.getMask());
setText(text);
}
@Override
public void focusGained(FocusEvent e) {
if (isPhone) {
try {
numberMaskFormat.setMask("**************");
} catch (ParseException ex) {
Logger.getLogger(WWFormattedTextField.class.getName()).log(Level.SEVERE, null, ex);
}
setFormatter(numberMaskFormat);
}
}
コンソール出力:
//Application launched
focus gained
n2:**************
//I entered 9051234567 and tabbed out
Focus lost
length = 10
text = 9051234657
Setting mask
n:###-###-####
Formatted text = - -
//Tabbed back in
focus gained
n2:**************
//Entered 19051234567 and tabbed out
Focus lost
length = 11
text = 19051234567
setting mask 2
n:# ###-###-####
Formatted text =
フォーカスが失われた後に JFormattedTextField 内のテキストをフォーマットする方法についてアドバイス/ヘルプ/ガイダンスが必要で、フォーマットは入力された桁数によって異なります。