我想在 javafx TextField 中添加验证,以便用户只能插入整数值( [0-9] 和 Dot )。用户还应该能够插入 B 或 b(代表十亿)、K 或 k(代表千)和 M 或 m(代表百万)。基本上它应该是一个金额字段。删除和退格键也应该有效。
例如 :
一旦用户点击 k,10k 就应该变成 10,000.00,并且 K 不应该显示在 amountfield(文本字段)上
同样,10M 或 10m 应转换为 10,000,000.00
不允许在文本字段中输入 adsadi342fn3 或 31233123werwer 或 dsad342134k。
我在 Swing 的情况下验证 TextField 时使用了 getKeyChar 方法。但如果 JavaFx 没有 getKeyChar 方法,我需要相同的实现。
我使用了以下方法,但问题是它允许用户输入任何值。示例:sdafewr23rf
private void amountEntered() {
if (amountField != null) {
String value;
char[] charArray = amountField.getText().toCharArray();
if (charArray.length > 0)
switch (charArray[charArray.length - 1]) {
case 't':
case 'T':
value = multiplyValue(amountField.getText(), new BigDecimal(1000000000000.0));
updateAmount(value);
break;
case 'b':
case 'B':
value = multiplyValue(amountField.getText(), new BigDecimal(1000000000.0));
updateAmount(value);
break;
case 'm':
case 'M':
value = multiplyValue(amountField.getText(), new BigDecimal(1000000.0));
updateAmount(value);
break;
case 'k':
case 'K':
value = multiplyValue(amountField.getText(), new BigDecimal(1000.0));
updateAmount(value);
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '.':
case ',':
updateAmount(amountField.getText());
break;
default:
break;
}
}
}
private String multiplyValue(String number, BigDecimal multValue) {
//get rid of "," for double parsing
BigDecimal value = new BigDecimal(cleanDouble(number.substring(0, number.length() - 1)));
value = value.multiply(multValue);
return value.toPlainString();
}