【问题标题】:Kotlin refresh imageview TornadoFXKotlin 刷新 imageview TornadoFX
【发布时间】:2021-07-12 04:08:24
【问题描述】:

我正在尝试刷新按钮叮当声上的 imageview 的图像,但它似乎不起作用。 这是我的代码:

class MasterView : View("Master View") {
    val controller: MyController by inject()
    val currentenemy = SimpleIntegerProperty(0)

    override val root = borderpane() {
        right = imageview(controller.monsters[currentenemy.value]) {
            setFitHeight(250.0)
            setFitWidth(175.0)
        }
        center = button("Change image") {
            action { currentenemy.value += 1 }
        }
    }
}
class MyController: Controller() {
    val monsters = FXCollections.observableArrayList("slime.png", "goblin.png", "mage.png", "knight.png", "boss.png")
}

我知道值在变化,但 imageview 似乎并不关心它。

【问题讨论】:

    标签: java android kotlin desktop-application tornadofx


    【解决方案1】:

    您正在使用字符串值创建图像视图。当您的currentEnemy 属性更改时,没有什么可以告诉图像视图更新。为此,您需要为图像视图提供一个可以跟踪的可观察值。

    例如:

    right = imageview(currentEnemy.stringBinding { controller.monsters[it ?: 0] }) {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      我真的不明白为什么要修复它,但我尝试将值放入 SimpleStringProperty 并将该变量传递给 imageview,现在它在 buttonclick 上更新。

      val simplestring = SimpleStringProperty("slime.png")
      ...
      imageview(observablepic)
      center = button("Change image") {
          action { 
              currentenemy.value += 1 
              simplestring.value = controller.monsters[currentenemy.value]
          }
      }
      ...
      
      class MyController: Controller() {
          val monsters = FXCollections.observableArrayList("slime.png", "goblin.png", "mage.png", "knight.png", "boss.png")
      }
      

      【讨论】:

      • 这是有效的,因为您正在使用可观察的字符串属性创建图像视图。您的原件是使用纯字符串值创建的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多