为了账号安全,请及时绑定邮箱和手机立即绑定

将属性绑定到派生自JavaFx / TornadoFX中的控件的值的正确方法

将属性绑定到派生自JavaFx / TornadoFX中的控件的值的正确方法

侃侃无极 2021-05-17 16:22:04
考虑下面的(kotlin / tornadofx)示例,该示例旨在通过绑定将文本字段的内容与标签的文本连接起来。标签应反映文本字段的派生值,在这种情况下为散列。我如何正确地实现这种绑定(我觉得使用变更侦听器不是正确的方法)。class HashView : View("My View") {    val hashProperty = SimpleStringProperty("EMPTY")    override val root = vbox {        textfield {            hashProperty.bind(stringBinding(text) { computeHash(text)}) // This does not work        }        label(hashProperty)    }}PS:只要我能以某种方式将其应用到tornadofx中,也欢迎使用Java / JavaFX中的答案。更新1:我发现只有一个小小的改动就可以使我的示例正常工作,即应该hashProperty.bind(stringBinding(textProperty() { computeHash(this.value) })但是,我仍然不确定这是否是常规方法。因此,我将保留这个问题。
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

我建议不要在计算中包含实际输入元素的属性。您应该先定义输入属性,然后将其绑定到文本字段。然后创建一个派生对象StringBinding并将其绑定到标签。还要注意,属性具有内置stringBinding函数,该函数会自动对该属性进行操作。这使您的代码看起来更加整洁,可以在需要时使其可重用,并且更易于维护:


class HashView : View("My View") {

    val inputProperty = SimpleStringProperty()

    val hashProperty = inputProperty.stringBinding { computeHash(it ?: "EMPTY") }


    override val root = vbox {

        textfield(inputProperty)

        label(hashProperty)

    }


    fun computeHash(t: String) = "Computed: $t"

}


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信