Проверка JavaFX TextField для целочисленного ввода, а также позволяет либо K или K (для тысяч) или M или m (для миллионов) в прошлом
Я хочу добавить проверку в javafx TextField, чтобы пользователь мог вставлять только целочисленные значения ([0-9] и точка). Также пользователь должен иметь возможность вставить либо B или b (для миллиардов) и K или k (для тысяч) и M или m (для миллионов). В основном это должно быть поле количества. Delete и Backspace также должны работать.
например :
10k должно стать 10,000.00, как только пользователь нажмет k и K не будет отображаться в поле количества (текстовое поле). Аналогично, 10M или 10m должны быть преобразованы в 10,000,000.00.
adsadi342fn3 или 31233123werwer или dsad342134k не должны быть разрешены для ввода в текстовое поле.
Я использовал метод getKeyChar при проверке TextField в случае Swing. Но мне нужна такая же реализация в случае 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();
}