如何使用 TornadoFX 改进我的代码以在 table 中显示数据数组?
How to improve my code to show a data array in a table, with 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])
}
}
}
它可以工作,但代码非常复杂。有没有更好的方法呢?
(也许定义一个class来保存数据会更简单,但我只是想测试一些不常见的情况)
更新:
完整的演示项目:https://github.com/javafx-demos/tornadofx-tableview-array-data-demo
这是定义列的更简单方法:
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] }
}
这是我显示数据数组的方式:
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])
}
}
}
它可以工作,但代码非常复杂。有没有更好的方法呢?
(也许定义一个class来保存数据会更简单,但我只是想测试一些不常见的情况)
更新:
完整的演示项目:https://github.com/javafx-demos/tornadofx-tableview-array-data-demo
这是定义列的更简单方法:
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] }
}