Kotlin 如何在TornadFX tableview中显示pojo属性?

Kotlin 如何在TornadFX tableview中显示pojo属性?,kotlin,tornadofx,Kotlin,Tornadofx,我正在编写一个非常简单的TornadoFX表格演示,试图在表格中显示一些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() {

我正在编写一个非常简单的TornadoFX表格演示,试图在表格中显示一些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
进行编译,但是单元格是空的

我做了很多搜索,但找不到用于当前最新tornado的代码(
1.7.16


这是一个完整的演示:

您需要引用属性,而不是getter,即
User::id
。要引用不可变属性,需要使用
readonlyColumn
builder:

readonlyColumn("id", User::id)
readonlyColumn("name", User::name)
也就是说,您确实应该在域对象中使用JavaFX属性。在基于JavaFX的应用程序中不这样做只会让一切变得更加困难,你会失去很多好处,或者至少你必须跳出困境

下面是使用可观察的JavaFX属性编写的完整应用程序。请注意,然后您将访问
idProperty
nameProperty
属性。使用这种方法,对基础数据项的更改也将自动显示在tableview中:

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)
        }
    }
}

您需要引用属性,而不是getter,即。
User::id
。要引用不可变属性,需要使用
readonlyColumn
builder:

readonlyColumn("id", User::id)
readonlyColumn("name", User::name)
也就是说,您确实应该在域对象中使用JavaFX属性。在基于JavaFX的应用程序中不这样做只会让一切变得更加困难,你会失去很多好处,或者至少你必须跳出困境

下面是使用可观察的JavaFX属性编写的完整应用程序。请注意,然后您将访问
idProperty
nameProperty
属性。使用这种方法,对基础数据项的更改也将自动显示在tableview中:

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)
        }
    }
}

感谢您介绍
readonlyColumn
和所有建议感谢您介绍
readonlyColumn
和所有建议