动态 table 列
Dynamic table columns
当我想从仅包含字符串(例如来自 csv 的数据)的列表列表中生成 table 时,我应该如何进行?列名无关紧要。从提供的所有示例中,我只看到将 table 项目绑定到特定模型(不适合那里,因为我有未知的列数和名称)。
如果您已经知道列名和数据类型,我建议对其进行硬编码。如果您对该格式一无所知,只是想创建一个具有完全动态列的 TableView,您可以使用 csv 数据中的索引作为提取器来为您的数据创建 StringProperty
值:
class MyView : View() {
val data = FXCollections.observableArrayList<List<String>>()
val csvController: CsvController by inject()
init {
runAsync {
csvController.loadData()
} ui { entries ->
// Generate columns based on the first row
entries.first().forEachIndexed { colIndex, name ->
root.column(name, String::class) {
value { row ->
SimpleStringProperty(row.value[colIndex])
}
}
}
// Assign the extracted entries to our list, skip first row
data.setAll(entries.drop(1))
}
}
override val root = tableview(data)
}
class CsvController : Controller() {
// Load data from CSV file here, we'll use som static data
// where the first row is the headers
fun loadData() = listOf(
listOf("Name", "Age"),
listOf("John", "42"),
listOf("Jane", "24")
)
}
这种方法只适用于可视化 CSV 文件中的数据。如果您需要编辑或操作数据,预先了解数据类型将产生一个不那么脆弱的应用程序 IMO :)
当我想从仅包含字符串(例如来自 csv 的数据)的列表列表中生成 table 时,我应该如何进行?列名无关紧要。从提供的所有示例中,我只看到将 table 项目绑定到特定模型(不适合那里,因为我有未知的列数和名称)。
如果您已经知道列名和数据类型,我建议对其进行硬编码。如果您对该格式一无所知,只是想创建一个具有完全动态列的 TableView,您可以使用 csv 数据中的索引作为提取器来为您的数据创建 StringProperty
值:
class MyView : View() {
val data = FXCollections.observableArrayList<List<String>>()
val csvController: CsvController by inject()
init {
runAsync {
csvController.loadData()
} ui { entries ->
// Generate columns based on the first row
entries.first().forEachIndexed { colIndex, name ->
root.column(name, String::class) {
value { row ->
SimpleStringProperty(row.value[colIndex])
}
}
}
// Assign the extracted entries to our list, skip first row
data.setAll(entries.drop(1))
}
}
override val root = tableview(data)
}
class CsvController : Controller() {
// Load data from CSV file here, we'll use som static data
// where the first row is the headers
fun loadData() = listOf(
listOf("Name", "Age"),
listOf("John", "42"),
listOf("Jane", "24")
)
}
这种方法只适用于可视化 CSV 文件中的数据。如果您需要编辑或操作数据,预先了解数据类型将产生一个不那么脆弱的应用程序 IMO :)