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)