首页 > 解决方案 > 当字符串变量更改 TornadoFX 时更改 TextArea 文本

问题描述

我有一个带有字符串变量的控制器,我希望 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
   }
...
}

标签: kotlinjavafxtornadofx

解决方案


这是我知道如何完成此任务的最快方法,但我真的不知道您要使用哪种设计模式:

class MyView: View() {
   val controller: MyController by inject()

   override val root = vbox {
      textarea(controller.myTextProperty)
   }
}

class MyController: Controller() {
   val myTextProperty = SimpleStringProperty()
}

注入方法会在 TornadoFX 范围内自动找到控制器,如果没有找到,则在第一次引用它时创建一个。TornadoFX 文本区域构建器函数在作为参数传入时将字符串属性从控制器绑定到 TextArea。但请记住,在文本区域中写入现在将自动更改控制器属性中的值,反之亦然。如果您不想要该功能,则必须更新您的问题以更具体地满足您的需求。


推荐阅读