Tornadofx 过滤器输入
Tornadofx filterInput
我想为文本字段创建一个特殊格式以转换为双精度。但是,我想用逗号代替句点来分隔小数点。我已经研究了好几天并查看了指南,但我仍然遇到问题。 isDouble
使用逗号时似乎不起作用。即使我使用句点,数据在写回时格式错误(即文本字段 12.13 在数据库中变为 1213.00)。这是我目前所拥有的:
val format = DecimalFormat("##0.00", DecimalFormatSymbols(Locale.GERMAN))
textfield(model.size, converter = object : StringConverter<Number>() {
override fun toString(number: Number?) = format.format(number)
override fun fromString(string: String?) = try {
format.parse(string).toDouble() }
catch (e: ParseException) {0.0}
}){
filterInput {
val ba = mutableListOf<Boolean>().asObservable()
it.controlNewText.toCharArray().forEach { char ->
when {
char.isDigit() -> ba.add(true)
char == ',' -> ba.add(true)
else -> ba.add(false)
}
}
when{
ba.any{false} -> return@filterInput false
else -> return@filterInput true
}
}}
这行得通吗?我知道循环 old-school 方式并使用变量(恶心!)并不是最酷的处理方式,但计算量相对较小且易于理解。
filterInput {
var decimalUsed = false
loop@ for (char in it.controlNewText) {
if (char == ',') {
if (decimalUsed) {
return@filterInput false
} else {
decimalUsed = true
}
} else if (!char.isDigit()) {
return@filterInput false
}
}
true
}
我想为文本字段创建一个特殊格式以转换为双精度。但是,我想用逗号代替句点来分隔小数点。我已经研究了好几天并查看了指南,但我仍然遇到问题。 isDouble
使用逗号时似乎不起作用。即使我使用句点,数据在写回时格式错误(即文本字段 12.13 在数据库中变为 1213.00)。这是我目前所拥有的:
val format = DecimalFormat("##0.00", DecimalFormatSymbols(Locale.GERMAN))
textfield(model.size, converter = object : StringConverter<Number>() {
override fun toString(number: Number?) = format.format(number)
override fun fromString(string: String?) = try {
format.parse(string).toDouble() }
catch (e: ParseException) {0.0}
}){
filterInput {
val ba = mutableListOf<Boolean>().asObservable()
it.controlNewText.toCharArray().forEach { char ->
when {
char.isDigit() -> ba.add(true)
char == ',' -> ba.add(true)
else -> ba.add(false)
}
}
when{
ba.any{false} -> return@filterInput false
else -> return@filterInput true
}
}}
这行得通吗?我知道循环 old-school 方式并使用变量(恶心!)并不是最酷的处理方式,但计算量相对较小且易于理解。
filterInput {
var decimalUsed = false
loop@ for (char in it.controlNewText) {
if (char == ',') {
if (decimalUsed) {
return@filterInput false
} else {
decimalUsed = true
}
} else if (!char.isDigit()) {
return@filterInput false
}
}
true
}