Py学习  »  tornado

如何在TornadoFx表视图中显示POJO属性?

Freewind • 5 年前 • 1194 次点击  

我正在编写一个非常简单的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 使其编译,但单元格是空的。

我做了很多搜索,但找不到代码来处理当前最新的龙卷风( 1.7.16 )

下面是一个完整的演示: https://github.com/javafx-demos/tornadofx-table-show-pojo-demo

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34223
 
1194 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Edvin Syse
Reply   •   1 楼
Edvin Syse    5 年前

你需要引用属性,而不是getter。 User::id . 要引用不可变属性,需要使用 readonlyColumn 建设者:

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