A validação do JavaFX TextField para entrada inteira e também permite K ou k (para milhares) ou M ou m (para milhões) no último

Eu quero adicionar validação no javafx TextField, para que o usuário só possa inserir valores inteiros ([0-9] e Dot). O usuário também deve poder inserir B ou b (para bilhões) e K ou k (para milhares) e M ou m (para milhões). Basicamente, deve ser um campo de quantidade. Excluir e Backspace também devem funcionar.

por exemplo :

10k deve se tornar 10.000,00 assim que o usuário pressionar k e K não devem ser exibidos no campo de quantidade (campo de texto). Da mesma forma, 10M ou 10m devem ser convertidos em 10.000.000,00

adsadi342fn3 ou 31233123werwer ou dsad342134k não devem ter permissão para inserir no campo de texto.

Eu usei o método getKeyChar ao validar o TextField no caso do Swing. Mas preciso da mesma implementação no caso do JavaFx, onde não temos o método getKeyChar.

Eu usei o método a seguir, mas o problema é que ele permite que o usuário insira qualquer valor. exemplo: 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();
    }

questionAnswers(3)

yourAnswerToTheQuestion