Почему мой filterInput получает отформатированное число, содержащее знаки препинания в определенных случаях? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть текстовое поле, которое я хочу ограничить только целыми числами.См. Приведенный ниже код.

Когда начинается представление, содержащее поле, и если модель построена с начальным значением по умолчанию для someInteger, представление отображает число правильно, без дополнительного форматирования.Он также фильтрует новый типизированный ввод как ожидалось.

Возникает проблема, когда рефакторинг модели не имеет значения по умолчанию.Будучи целочисленным свойством, по умолчанию оно равно 0. Когда я позже назначу этому свойству новое значение, переданный controlNewText содержит знаки препинания, такие как 1,234.Это приводит к сбою проверки и отфильтрованию вновь назначенного значения из представления.

Почему форматирование controlNewText сначала форматируется?Есть ли способ предотвратить это?

textfield(model.someInteger) {
    required()
    textFormatter = TextFormatter(IntegerStringConverter(), model.item.someInteger)
    stripNonInteger()
    filterInput { it.controlNewText.isInt() }
}

class SomeData {
    val someIntegerProperty = SimpleIntegerProperty(this, "someInteger")
    var someInteger by someIntegerProperty
}

class SomeDataModel : ItemViewModel<SomeData>(SomeData()) {
    val someInteger = bind(SomeData::someIntegerProperty)
}

1 Ответ

0 голосов
/ 23 мая 2018

Форматирование выполняется указанным вами TextFormatter.Обязательно укажите тот, который не добавляет тысячи разделителей.Вот полное работоспособное приложение, которое настраивает NumberStringConverter внутри форматера.Обратите внимание, что я удалил оператор filterInput, поскольку он уже покрыт stripNonInteger.

class MainView : View("Main view") {
    val model = SomeDataModel()

    override val root = borderpane {
        center {
            form {
                fieldset {
                    field("Some integer") {
                        textfield(model.someInteger) {
                            required()
                            textFormatter = TextFormatter(NumberStringConverter("########"), model.someInteger.value)
                            stripNonInteger()
                        }
                    }
                    button("Set some value").action {
                        model.someInteger.value = 1234
                    }
                }
            }
        }
    }
}

class SomeData {
    val someIntegerProperty = SimpleIntegerProperty(this, "someInteger")
    var someInteger by someIntegerProperty
}

class SomeDataModel : ItemViewModel<SomeData>(SomeData()) {
    val someInteger = bind(SomeData::someIntegerProperty)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...