如何在 TornadoFX tableview 中显示 pojo 属性?
How to show pojo properties in TornadoFX tableview?
我正在写一个非常简单的 TornadoFX table 演示,试图在 table 中显示一些 pojo 的属性,但是单元格都是空的。
主要代码为:
data class User(val id: Int, val name: String)
private val data = listOf(User(111, "AAA"), User(222, "BBB"), User(333, "CCC"), User(444, "DDD")).observable()
class HelloWorld : View() {
override val root = vbox {
tableview(data) {
column("id", User::id.getter)
column("name", User::name.getter)
}
}
}
我用User::id.getter
编译,但是单元格是空的。
我进行了大量搜索,但找不到适用于当前最新龙卷风的代码 (1.7.16
)
这是一个完整的演示:https://github.com/javafx-demos/tornadofx-table-show-pojo-demo
您需要引用 属性,而不是 getter,即。 User::id
。要引用不可变属性,您需要使用 readonlyColumn
构建器:
readonlyColumn("id", User::id)
readonlyColumn("name", User::name)
也就是说,您确实应该在域对象中使用 JavaFX 属性。在基于 JavaFX 的应用程序中不这样做只会让一切变得更难,并且您会失去很多好处,或者至少您必须跳过障碍。
这是使用可观察的 JavaFX 属性编写的完整应用程序。请注意,您将改为访问 idProperty
和 nameProperty
属性。使用这种方法,对基础数据项的更改也将自动在表视图中可见:
class User(id: Int, name: String) {
val idProperty = SimpleIntegerProperty(id)
var id by idProperty
val nameProperty = SimpleStringProperty(name)
var name by nameProperty
}
private val data = listOf(User(111, "AAA"), User(222, "BBB"), User(333, "CCC"), User(444, "DDD")).observable()
class HelloWorld : View() {
override val root = vbox {
tableview(data) {
column("id", User::idProperty)
column("name", User::nameProperty)
}
}
}
我正在写一个非常简单的 TornadoFX table 演示,试图在 table 中显示一些 pojo 的属性,但是单元格都是空的。
主要代码为:
data class User(val id: Int, val name: String)
private val data = listOf(User(111, "AAA"), User(222, "BBB"), User(333, "CCC"), User(444, "DDD")).observable()
class HelloWorld : View() {
override val root = vbox {
tableview(data) {
column("id", User::id.getter)
column("name", User::name.getter)
}
}
}
我用User::id.getter
编译,但是单元格是空的。
我进行了大量搜索,但找不到适用于当前最新龙卷风的代码 (1.7.16
)
这是一个完整的演示:https://github.com/javafx-demos/tornadofx-table-show-pojo-demo
您需要引用 属性,而不是 getter,即。 User::id
。要引用不可变属性,您需要使用 readonlyColumn
构建器:
readonlyColumn("id", User::id)
readonlyColumn("name", User::name)
也就是说,您确实应该在域对象中使用 JavaFX 属性。在基于 JavaFX 的应用程序中不这样做只会让一切变得更难,并且您会失去很多好处,或者至少您必须跳过障碍。
这是使用可观察的 JavaFX 属性编写的完整应用程序。请注意,您将改为访问 idProperty
和 nameProperty
属性。使用这种方法,对基础数据项的更改也将自动在表视图中可见:
class User(id: Int, name: String) {
val idProperty = SimpleIntegerProperty(id)
var id by idProperty
val nameProperty = SimpleStringProperty(name)
var name by nameProperty
}
private val data = listOf(User(111, "AAA"), User(222, "BBB"), User(333, "CCC"), User(444, "DDD")).observable()
class HelloWorld : View() {
override val root = vbox {
tableview(data) {
column("id", User::idProperty)
column("name", User::nameProperty)
}
}
}