如何使用TornadoFX改进我的代码以在表中显示数据数组?

时间:2018-07-24 10:28:17

标签: kotlin tornadofx

这是我显示数据数组的方式:

private val data = observableArrayList(
        arrayOf("AAA", "111"),
        arrayOf("BBB", "222"),
        arrayOf("CCC", "333")
)

class HelloWorld : View() {
    override val root = tableview<Array<String>>(data) {
        column("name") { cellDataFeatures: TableColumn.CellDataFeatures<Array<String>, String> -> 
            SimpleStringProperty(cellDataFeatures.value[0]) 
        }
        column("value") { cellDataFeatures: TableColumn.CellDataFeatures<Array<String>, String> -> 
            SimpleStringProperty(cellDataFeatures.value[1]) 
        }
    }
}

它可以工作,但是代码非常复杂。有什么更好的方法吗?

(也许定义一个类来保存数据会使其更简单,但我只想测试一些不常见的情况)

更新:

完整的演示项目:https://github.com/javafx-demos/tornadofx-tableview-array-data-demo

1 个答案:

答案 0 :(得分:1)

这是定义列的一种简单方法:

class HelloWorld : View() {
    override val root = tableview(data) {
        column<Array<String>, String>("name", { it.value[0].toProperty() })
        column<Array<String>, String>("value", { it.value[1].toProperty() })
    }
}

也就是说,使用专门的数据结构可以减少麻烦:)

另一种方法是只配置单元格项目类型,然后配置值工厂:

column("name", String::class) {
    value { it.value[0] }
}
column("value", String::class) {
    value { it.value[1] }
}