Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 字符串变量更改时更改文本区域文本_Kotlin_Javafx_Tornadofx - Fatal编程技术网

Kotlin 字符串变量更改时更改文本区域文本

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)

我有一个带有字符串变量的控制器,我希望当控制器的字符串变量更改时,TextArea的文本值也会更改

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(…)
)中包装更新属性的调用来完成此操作)。这是一个巨大的帮助,非常感谢!