java - 将属性绑定到从 JavaFx / TornadoFX 中的控件派生的值的正确方法
问题描述
考虑下面的 (kotlin/tornadofx) 示例,该示例旨在通过绑定将文本字段的内容与标签的文本连接起来。标签应反映文本字段的派生值,在本例中为哈希值。我如何正确地实现这种绑定(我觉得使用 changelistener 不是正确的方法)。
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) })
然而,我仍然不确定这是否是传统的方法。因此,我将保留这个问题。
解决方案
我建议不要在计算中涉及实际输入元素的属性。您应该首先定义输入属性并将其绑定到文本字段。然后创建一个派生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"
}
推荐阅读
- html - 有什么方法可以在不使用的情况下提供下拉菜单
- c# - AWS 环境中的 WCF UserNameTransport 错误 - 收到不安全或不正确安全的故障
- php - 如何使用 PHP 从数据库中计算句子中的单词
- php - 出现错误时如何将用户重定向到错误页面?
- mysql - 使用mysql从字符串中查找城市和国家名称
- apache-spark - Spark Coalesce 会执行 Shuffle
- python - 无法使用 SQL 数据库中项目的值
- reactjs - KendoReact Grid 显示错误的列
- flask-restful - 2 GET 到 Python Flask Restful 中的相同资源
- php - 如何修复未使用表单输入执行的 php 代码?