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
            }