繁体   English   中英

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
                            } 
                        }}

这行得通吗? 我知道循环使用老式方法和使用变量(总)并不是处理事情的最酷方法,但计算量相对较小且易于理解。

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
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM