JavaFX TextField-Validierung für die Ganzzahleingabe und erlauben außerdem entweder K oder k (für Tausend) oder M oder m (für Million) in last

Ich möchte eine Validierung in javafx TextField hinzufügen, sodass der Benutzer nur ganzzahlige Werte ([0-9] und Punkt) einfügen kann. Außerdem sollte der Benutzer in der Lage sein, entweder B oder b (für Milliarden) und K oder k (für Tausend) und M oder m (für Millionen) einzufügen. Grundsätzlich sollte es ein Betragsfeld sein. Löschen und Rücktaste sollten ebenfalls funktionieren.

zum Beispiel

10k sollte 10.000.00 werden, sobald der Benutzer k drückt und K nicht im Betragsfeld (Textfeld) angezeigt wird. Ebenso sollten 10M oder 10m in 10.000.000.00 konvertiert werden.

adsadi342fn3 oder 31233123werwer oder dsad342134k dürfen nicht in das Textfeld eingegeben werden.

Ich habe die getKeyChar-Methode verwendet, um TextField im Falle von Swing zu validieren. Aber ich brauche die gleiche Implementierung für JavaFx, wo wir keine getKeyChar-Methode haben.

Ich habe die folgende Methode verwendet, aber das Problem dabei ist, dass der Benutzer einen beliebigen Wert eingeben kann. Beispiel: 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();
    }

Antworten auf die Frage(6)

Ihre Antwort auf die Frage