Проверка 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();
    }

Ответы на вопрос(1)

Ваш ответ на вопрос