CellCache неожиданно рендерится в TableView с tornadoFX
Я просто озадачен cellCache
использование функции в TornadoFX
с Kotlin
, Визуализация всегда странная и неожиданная, что с этим происходит? Код здесь:
data class Person(var name : String, var age : Int, var sex : Boolean)
class MyView: View()
{
val list = listOf<Person>(
Person("Name A", 20, false),
Person("Name B", 22, false),
Person("Name C", 21, true),
Person("Name D", 30, true),
Person("Name E", 35, true)
).observable()
override val root = stackpane {
vbox {
tableview(items = list) {
column("Name", Person::name)
column("Age", Person::age)
column("Sex", Person::sex).cellCache{
checkbox{
isSelected = it
setOnAction {
println("Selection: $isSelected")
}
}
}
}
}
}
}
Я ожидаю, что все строки будут отображаться с checkbox
в столбце "Sex"
, но код выше будет просто отображать два: один selected
и другой unselected
что, черт возьми, происходит с cellcache
? Я также нахожу изменение data class
с приведенным ниже, и все в порядке:
data class Person(var name : String, var age : Int, var sex : SimpleBooleanProperty)
Однако я должен многое изменить со свойствами класса данных таким образом, я также не знаю почему. Помоги мне, и спасибо заранее!
1 ответ
cellCache
создает уникальную ячейку для каждого элемента в вашем списке. Если ваши предметы не реализуют смысл equals
а также hashCode
функции, с которыми вы столкнетесь с проблемами cellCache
поскольку одна и та же ячейка будет использоваться для нескольких базовых элементов.
Добавление equals
а также hashCode
Реализация, которая гарантирует, что каждый элемент уникален, должна решить проблему. Кажется, что реализация по умолчанию в классе данных Kotlin не сокращает это:)
Если вы не можете или не будете предоставлять equals
а также hashCode
реализации я бы предложил использовать cellFormat
вместо этого, который не полагается на равенство объектов для создания уникальной ячейки.
Я сожалею, что это не разъяснено в руководстве, я обновлю часть TableView с дополнительной информацией и предупреждением об использовании cellCache
,