Помогите разобраться с TableView в Tornadofx и fxml

Пытаюсь модифицировать пример с обучалки Torandofx: просто заполнить табличку уже перечисленными элементами. Затыкаюсь сразу после оперделения значений в коде. Тупо не понимаю каким образом определить Property на каждый столбец.

Использовал такой код: fxml

<AnchorPane prefHeight="733.0" prefWidth="806.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1">
<TableView fx:id="MainTable" layoutX="41.0" layoutY="28.0" prefHeight="655.0" prefWidth="727.0">
      <columns>
         <TableColumn fx:id="id" prefWidth="150.0" text="Column 1" />
         <TableColumn fx:id="name" prefWidth="198.0" text="Column 2" />
         <TableColumn fx:id="birthday" prefWidth="163.0" text="Column 3" />
         <TableColumn fx:id="Age" editable="false" prefWidth="215.0" text="Column 4" />
      </columns>
</TableView>
   <Button fx:id="btn_refresh" layoutX="584.0" layoutY="694.0" mnemonicParsing="false" onAction="#table_refresh" prefHeight="25.0" prefWidth="100.0" text="JОбновить" />
</AnchorPane>

Основной код:

class Person(id: Int, name: String, birthday: LocalDate) {
    val idProperty = SimpleIntegerProperty(id)
    var id by idProperty

    val nameProperty = SimpleStringProperty(name)
    var name by nameProperty

    val birthdayProperty = SimpleObjectProperty(birthday)
    var birthday by birthdayProperty

    val ageProperty = birthdayProperty.objectBinding { Period.between(it, LocalDate.now()).years }
    val age by ageProperty
}

private var persons = mutableListOf(
    Person(1,"Samantha Stuart", LocalDate.of(1981,12,4)),
    Person(2,"Tom Marks", LocalDate.of(2001,1,23)),
    Person(3,"Stuart Gills", LocalDate.of(1989,5,23)),
    Person(3,"Nicole Williams", LocalDate.of(1998,8,11))
).asObservable()

class TableView() : View() {
    
    override val root : AnchorPane by fxml("/table_view/table_view.fxml")

    val tb_Table:  TableView by fxid("MainTable");
    val tc_id_table : TableColumn<Person,Int> by fxid("id")
    val tc_name_table : TableColumn<Person,String> by fxid("name")
    val tc_birthday_table : TableColumn<Person,LocalDate> by fxid("birthday")
}

Дальше затыкаюсь. Пытался использовать cellFactoryProperty - безрезультатно. Пытался переводить все элементы persons в Person().toProperty - тоже к эффекту не привело.
Пытался понять оригинальный пример с https://docs.oracle.com/javafx/2/ui_controls/table-view.htm. В нем используется функция setCellValueFactory с созданием свойства на PropertyValueFactory<Person, String(Int и т.д)>(<свойство класса>), применная к колонке. Вроде бы получилось прописать адекватно

tc_id_table.setCellValueFactory(PropertyValueFactory<Person,Int>("Person:idProperty"))
        tc_name_table.setCellValueFactory(PropertyValueFactory<Person,String>("Person:nameProperty"))
        tc_birthday_table.setCellValueFactory(PropertyValueFactory<Person,LocalDate>("Person:birthdayProperty"))

Однако в дальнейшем - не определяется функция table.setItems(data); tb_Table просто не имеет такого метода. Соответвенно выведено ничего не будет. Как можно записать данные в таблицу?


Ответы (0 шт):