Javafx CellCache在TableView中使用tornadoFX意外渲染

Javafx CellCache在TableView中使用tornadoFX意外渲染,javafx,tableview,kotlin,tornadofx,Javafx,Tableview,Kotlin,Tornadofx,我只是对TornadFX和Kotlin中的cellCache功能用法感到困惑。渲染总是奇怪和意外的,这会发生什么?代码如下: data class Person(var name : String, var age : Int, var sex : Boolean) class MyView: View() { val list = listOf<Person>( Person("Name A", 20, false), Pe

我只是对
TornadFX
Kotlin
中的
cellCache
功能用法感到困惑。渲染总是奇怪和意外的,这会发生什么?代码如下:

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")
                        }
                    }
                }
            }
        }
    }
}
然而,我必须以这种方式对数据类属性进行很多更改,我也不知道为什么。
帮帮我,提前谢谢你

cellCache为列表中的每个项目创建一个唯一的单元格。如果您的项没有实现有意义的
equals
hashCode
函数,您将在
cellCache
中遇到问题,因为同一个单元格将用于多个基础项

添加
equals
hashCode
实现以确保每个项都是唯一的,这应该可以解决问题。Kotlin数据类中的默认实现似乎并没有解决这个问题:)

如果您不能或不愿意提供
equals
hashCode
实现,我建议改用
cellFormat
,它不依赖对象相等性来生成唯一的单元格


很抱歉,指南中没有明确说明这一点,我将用更多信息更新TableView部分,并警告使用
cellCache

对不起,Person类的最后一个代码不应使用数据类,而应使用公共类前缀。这是有效的:
classperson(var name:String,var age:Int,sex:Boolean){var sex by property(simpleboleanproperty(sex))fun sexProperty()=getProperty(Person::sex)}
非常感谢,我现在应该在我的代码中测试一下。谢谢,
cellFormat
适合我<代码>图形=复选框{isSelected=it设置操作{println(“选择:$isSelected”)}
data class Person(var name : String, var age : Int, var sex : SimpleBooleanProperty)