Я хочу добавить проверку в javafx TextField, чтобы пользователь мог вставлять только целочисленные значения ([0-9] и Dot ). Также пользователь должен иметь возможность вставить B или b (для миллиарда) и K или k (для тысячи) и M или m (для миллиона). В основном это должно быть поле суммы. Удалить и 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();
}