Kotlin 字符串变量更改时更改文本区域文本
我有一个带有字符串变量的控制器,我希望当控制器的字符串变量更改时,TextArea的文本值也会更改Kotlin 字符串变量更改时更改文本区域文本,kotlin,javafx,tornadofx,Kotlin,Javafx,Tornadofx,我有一个带有字符串变量的控制器,我希望当控制器的字符串变量更改时,TextArea的文本值也会更改 class MyView: View() { ... button("Run Test").action { runAsync { for(test in testList){ controller.updateText = "running" + test.name run(test)
class MyView: View() {
...
button("Run Test").action {
runAsync {
for(test in testList){
controller.updateText = "running" + test.name
run(test)
}
}
}
...
scriptRanArea = textarea {
text = controller.updateText
}
...
}
这是我知道如何实现这一点的最快方法,但我真的不知道您想要使用哪种设计模式:
class MyView: View() {
val controller: MyController by inject()
override val root = vbox {
textarea(controller.myTextProperty)
}
}
class MyController: Controller() {
val myTextProperty = SimpleStringProperty()
}
inject方法会自动在TornadoFX范围内查找控制器,或者在首次引用控制器时创建一个控制器(如果未找到)。TornadoFX文本区域生成器函数将字符串属性作为参数传入时,将其从控制器绑定到文本区域。但是请记住,在文本区域中写入将自动更改控制器属性中的值,反之亦然。如果您不想使用该功能,则必须更新您的问题,使其更符合您的需要。我不会说Kotlin,但在JavaFX中,您可以将字符串表示为
StringProperty
,或者向其注册一个侦听器,以更改文本区域中的文本,或者将文本区域中的文本绑定到它,这完全取决于你想做什么。请注意,由于您似乎在这里使用后台线程,因此通过这种方法,您应该确保在FX应用程序线程上更新StringProperty
(在JavaFX中,您可以通过在Platform.runLater(…)
)中包装更新属性的调用来完成此操作)。这是一个巨大的帮助,非常感谢!