我有一个文本字段,我只想限制为整数。请参阅下面的代码。
当包含该字段的视图开始,并且如果使用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)
}
答案 0 :(得分:0)
格式化由您指定的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)
}