我正在学习Kotlin和TornadoFX来编程一个非常简单的任务:两个按钮,一个是Int 1,另一个是Int 200。 当我单击按钮 1 时,我想使用 Int 2 更新和显示按钮 1,使用 Int 201 更新和显示另一个按钮。 以下程序将允许我检查更新数据,并且似乎都是正确的。 我的问题是为什么按钮上的显示不会根据此进行更新。 请帮忙。
class MainView : View("Hello TornadoFX") {
val controllera: ControllerA by inject()
val i: Int? = 1
val j: Int? = 2
override val root = hbox {
button(controllera.s1.toString()) {
setOnAction {
setId(i.toString())
println(" in view button 1 s1: { ${controllera.s1.toString()} }")
controllera.temp(i)
}
}
button(controllera.s2.toString()) {
setOnAction {
setId(j.toString())
println(" in view button 2 s2: { ${controllera.s2.toString()} }")
controllera.temp(j)
}
}
label(title) {
addClass(Styles.heading)
}
}
}
class ControllerA :Controller(){
var s1: Int =1
var s2: Int = 200
fun temp(k: Int?) {
when( k) {
1 -> {println("botton ID " +k)
println(" current value of s1: $s1 ")
s1 = s1+1
println(" new value of s1 to update: $s1 ")
s2 = s2 +1
println(" new value of s2 to update: $s2 ")}
2 -> {
println("botton ID " + k)
println("current value of s2: $s2 ")}
else -> println("default")
}
}
}
test output at various location:
in view button 1 s1: { 1 } //In MainView
botton ID 1 //in ControllerA
s1: 1
new value of s1 to update: 2
new value of s2 to update: 201
in view button 2 s2: { 201 } //in MainView
botton ID 2 //in ControllerA
current value of s2: 201
Note: those updated data will not be display on button text.
您需要使用可观察的属性和绑定。刚开始编写代码而不阅读框架不是一个好方法。我建议您阅读该指南作为起点。这是重写的代码,以便每个按钮在单击时显示并增加相应的数字:
class MainView : View("Hello TornadoFX") {
val controllera: ControllerA by inject()
val myModel: MyModel by inject()
override val root = hbox {
button(myModel.s1.asString()) {
action {
controllera.inc(myModel.s1)
}
}
button(myModel.s2.asString()) {
action {
controllera.inc(myModel.s2)
}
}
label(title)
}
}
class MyModel : ViewModel() {
val s1 = SimpleIntegerProperty(1)
val s2 = SimpleIntegerProperty(200)
}
class ControllerA : Controller() {
fun inc(v: IntegerProperty) {
v.value = v.value + 1
}
}