java – 如何将TornadoFX中的文本字段限制为仅限数字

这里的问题是我想确保用户没有输入任何字符串或文本,特别是我需要在以后输入他的数据库,所以我不会在数据库的部分搞砸了,这里是部分代码是我希望使用带有限制整数的textview(特别是am字段的数量)的视图.
PS:我还是JavaFX和TornadoFX的新手,所以希望这听起来不是一个相当愚蠢的问题.

我的代码:

package com.company.view

import javafx.beans.property.SimpleIntegerProperty
import javafx.scene.control.CheckBox
import tornadofx.*
import javafx.scene.control.TextField
import javafx.util.converter.NumberStringConverter
import java.sql.Connection

class Add: View() {
    override val root = Form()
    private val mainMenu: MainMenu by inject()
    private var cname: TextField by singleAssign()
    private var address: TextField by singleAssign()
    private var sname: TextField by singleAssign()
    private var ch: CheckBox by singleAssign()
    private var am: TextField by singleAssign()
    var conn: Connection?= mainMenu.conn

    init {
        with(root) {
            vbox(30.0) {
                fieldset("Enter Your Info below") {
                    field("Enter The Customer's Name") {
                            cname = textfield()
                    }
                    field("Enter the Customer's address") {
                        address = textfield()
                    }
                    field("Enter Bought Stock's Name") {
                        sname = textfield()
                    }
                    field("Do you wish to pay now?") {
                        ch = checkbox()
                    }
                    field("Enter the amount you wish to buy"){
                        am = textfield()
                    }
                    button("Submit")
                    {
                        setOnAction {
                            addPayment(cname.text, address.text, sname.text, ch.isSelected, am.text)
                        }
                    }
                }
            }
        }
    }

   private fun addPayment(cusName: String, caddress: String, stname: String, che: Boolean,am: String){
//required code for inserting into the database here.


    }
}
最佳答案
您可以使用我们添加到TextField的filterInput扩展函数,并检查添加后的文本是否为int.如果不是,则拒绝最后一次输入更改:

textfield {
    filterInput { it.controlNewText.isInt() } 
}

另外,您需要查看ItemViewModel.将每个输入元素分配给变量并从提交中的输入值中提取值是一种反模式.如果您使用视图模型,您的代码将更清晰,更容易推理和重构.

PS:filterInput函数在即将发布的TornadoFX 1.7.15中可用,同时你可以将这个扩展函数添加到你的项目中:

fun TextInputControl.filterInput(discriminator: (TextFormatter.Change) -> Boolean) {
    textFormatter = TextFormatter<Any>(CustomTextFilter(discriminator))
}

转载注明原文:java – 如何将TornadoFX中的文本字段限制为仅限数字 - 代码日志