Важным моментом здесь является то, что JavaFX требует или, по крайней мере, предпочитает наблюдаемые свойства.Вместо объявления изменяемого свойства вы должны объявить один из типов свойств JavaFX, в зависимости от того, какой тип свойства вы хотите (String, Double, Int и т. Д.).Все, что вам действительно нужно, это объявить это свойство:
class Customer {
val ageProperty = SimpleIntegerProperty()
}
Вы можете обойтись только этим, без использования каких-либо делегатов.Однако, если вы хотите изменить это свойство, вам нужно изменить свойство value
внутри свойства, которое вы определили, поэтому код выглядит так:
customer.ageProperty.value = 42
Это громоздкотак что для простоты вы хотите добавить геттеры и сеттеры.Выполнение этого вручную будет выглядеть примерно так:
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 позволяют вам связывать с элементом пользовательского интерфейса, например, с текстовым полем.Изменения в текстовом поле будут записаны обратно в свойство, а изменения свойства будут записаны обратно в пользовательский интерфейс.