这里的重点是 JavaFX 需要或至少更喜欢可观察的属性。您可以声明一种 JavaFX 属性类型,而不是声明可变属性,具体取决于您想要的属性类型(String、Double、Int 等)。你真正需要的是声明这个属性:
class Customer {
val ageProperty = SimpleIntegerProperty()
}
您无需使用任何委托即可解决此问题。但是,如果你想改变这个属性,你需要改变你定义的属性里面的value属性,所以代码看起来是这样的:
customer.ageProperty.value = 42
这很麻烦,所以为了简单起见,您需要添加 getter 和 setter。手动执行此操作看起来像这样:
val ageProperty = SimpleIntegerProperty()
var age: Int
get() = ageProperty.value
set(value) { ageProperty.value = value }
现在您可以像这样设置Customer 的年龄:
customer.age = 42
这更方便,但您必须为每个属性声明所有代码,因此在 TornadoFX 中我们引入了属性委托,它通过一个简单的语句来处理所有这些,所以:
val ageProperty = SimpleIntegerProperty()
var age by ageProperty
最终结果是相同的,您无需做任何繁重的工作。
为了清楚起见,这解释了属性委托,而不是为什么 JavaFX 属性有用。 JavaFX 属性允许您绑定到 UI 元素,例如文本字段。对文本字段的更改将被写回属性,对属性的更改将被写回 UI。