这是我需要的:一个文本字段,用户可以在其中输入:
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 中的文本的建议/帮助/指导,并且格式会根据输入的数字而有所不同。