Помогите разобраться с 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 просто не имеет такого метода. Соответвенно выведено ничего не будет. Как можно записать данные в таблицу?