我试着从这个页面实现激励的例子:https://docs.tornadofx.io/0_subsection/1_why_tornadofx
为此,我需要一个数据类Person,定义如下:
class Person(id: Int, name: String, birthday: LocalDate) {
val idProperty = SimpleIntegerProperty(id)
var id by idProperty
val nameProperty = SimpleStringProperty(name)
var name by nameProperty
val birthdayProperty = SimpleObjectProperty(birthday)
var birthday by birthdayProperty
val age: Int get() = Period.between(birthday, LocalDate.now()).years
}
为此,需要进行以下导入:
import javafx.beans.property.SimpleIntegerProperty
import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty
import java.time.LocalDate
import java.time.Period
但是,如果我尝试运行该示例,我会得到以下错误:
Kotlin: Property delegate must have a 'getValue(Person, KProperty<*>)' method. None of the following functions is suitable:
public open fun getValue(): Int! defined in javafx.beans.property.SimpleIntegerProperty
我可以通过不使用委托类型并像这样设置属性来避免这种情况:
val idProperty = SimpleIntegerProperty(id)
var id: Int
get() = idProperty.value
set(value) { idProperty.value = value}
但这似乎违背了在TornadoFX中使用委托的意义,因为这是他们使用委托的激励性示例。
下面是我在委托类型中发现的内容:https://edvin.gitbooks.io/tornadofx-guide/content/part2/Property_Delegates.html
不过,这并不能帮助var id by idProperty
的简写工作。
有人能给我指一下正确的方向吗?
1条答案
按热度按时间nxowjjhe1#
您还需要导入以下内容:
这些是为JavaFX中的各种类型(例如,属性、可观察值等)定义的扩展操作符函数,以便这些类型可以用作委托。但这些函数并没有在这些类型中定义,因此需要额外的导入。