Ali*_*oon 3 java javafx kotlin 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.
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用filterInput
我们添加的扩展函数,TextField
并检查添加后的文本是否为int.如果不是,则拒绝最后一次输入更改:
textfield {
filterInput { it.controlNewText.isInt() }
}
Run Code Online (Sandbox Code Playgroud)
另外,您需要查看ItemViewModel.将每个输入元素分配给变量并从提交中的输入值中提取值是一种反模式.如果您使用视图模型,您的代码将更清晰,更容易推理和重构.
PS:该filterInput
功能在即将发布的TornadoFX 1.7.15中可用,同时您可以将此扩展功能添加到您的项目中:
fun TextInputControl.filterInput(discriminator: (TextFormatter.Change) -> Boolean) {
textFormatter = TextFormatter<Any>(CustomTextFilter(discriminator))
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1053 次 |
最近记录: |