Динамические столбцы таблицы

Как мне поступить, если я хочу создать таблицу из списка списков, который содержит только строки (например, данные из csv). Имена столбцов не имеют значения. Из всех приведенных примеров я видел только привязку элементов таблицы к конкретной модели (которая туда не подходит, так как у меня неизвестно количество и имена столбцов).


person Creotik    schedule 13.10.2017    source источник


Ответы (1)


Если вы уже знаете имена столбцов и тип данных, я бы предложил жестко закодировать это. Если вы ничего не знаете о формате и просто хотите создать 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 :)

person Edvin Syse    schedule 13.10.2017
comment
Кажется, это то, что я искал, спасибо! К сожалению, я не буду знать предварительные типы данных. - person Creotik; 13.10.2017
comment
Хотя это работает в первый раз, это будет повторно добавлять образцы столбцов снова и снова при втором запуске. Как мы их удаляем? - person csotiriou; 20.07.2020