【发布时间】:2016-03-09 06:20:59
【问题描述】:
我想在 javafx TextField 中添加验证,这样用户应该只能插入整数值([0-9] 和 Dot )。用户还应该能够插入 B 或 b(十亿)和 K 或 k(千)和 M 或 m(百万)。基本上它应该是一个数量字段。 Delete 和 Backspace 也应该可以工作。
例如:
用户点击 k 后,10k 应立即变为 10,000.00,并且 K 不应显示在数量字段(文本字段)上 同样 10M 或 10m 应该转换成 10,000,000.00
不应允许在文本字段中输入 adsadi342fn3 或 31233123werwer 或 dsad342134k。
在 Swing 的情况下,我在验证 TextField 时使用了 getKeyChar 方法。但是对于没有 getKeyChar 方法的 JavaFx,我需要相同的实现。
我使用了以下方法,但问题是它允许用户输入任何值。示例: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();
}
【问题讨论】:
-
类似(虽然略有不同)的问题:String with numbers and letters to double javafx
标签: input javafx textfield restrict