[JavaFX] getValue() vom Spinner auf Integer überprüfen?


01.06.2022, 17:24

Folgendes ist die Lösung, um zu überprüfen, ob der Inhalt eine Ganzzahl enthält:

SpinnerValueFactory<Integer> spinner = new SpinnerValueFactory.IntegerSpinnerValueFactory(0, 365, 0);
StringConverter<Integer> sci = spinner .getConverter();
StringConverter<Integer> sci2 = new StringConverter<>() {
    @Override
    public Integer fromString(String value) {
        try {
            return sci.fromString(value);
        } catch (NumberFormatException nfe) {
            System.out.println("Bad integer: " +
                    value);
            return 0;
        }
    }

    @Override
    public String toString(Integer value) {
        return sci.toString(value);
    }
};
spinner .setConverter(sci2);
this.options_Spinner_StartInterval_days.setValueFactory(spinner );

Quelle

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Die Standardkonverter für die Spinner Factories fangen falsche Eingaben nicht so gut ab, du müsstest dir selbst einen Converter schreiben. Dazu brauchst du eine Klasse, die von StringConverter<Integer> erbt. Eine Instanz von ihr kannst du anschließend an die ValueFactory deines Spinner-Objekts übergeben.

Ungefähr so:

var factory = (SpinnerValueFactory.IntegerSpinnerValueFactory) spinner.getValueFactory();
var converter = new YourConverter(
  spinner.getEditor(),
  factory.getMin(),
  factory.getMax());
factory.setConverter(converter);

Deine Prüfung hingegen kommt einfach zu spät. Die Eingabe wird schon früher verwertet.

verreisterNutzer  01.06.2022, 17:28

Ich habe tatsächlich eine Lösung gefunden, damit ich eine personalisierte Fehlermeldung ausgeben lassen kann ...

In der Frage ergänzt.

1