簡體   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