CellCache在TableView中用tornadoFX意外渲染

我只是困惑于与KotlincellCache函数的使用。 渲染总是奇怪而且意想不到,那会发生什么? 代码在这里:

 data class Person(var name : String, var age : Int, var sex : Boolean) class MyView: View() { val list = listOf( 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") } } } } } } } 

我希望所有的行都会在"Sex"列中显示一个checkbox ,但是上面的代码只会显示两个:一个selected ,另一个unselected ,这个cellcache到底在cellcache什么? 我也发现改变data class与下面的一个,这是正确的:

 data class Person(var name : String, var age : Int, var sex : SimpleBooleanProperty) 

不过,我必须用这种方式改变数据类属性,我也不知道为什么。 帮助我,并提前感谢!

One Solution collect form web for “CellCache在TableView中用tornadoFX意外渲染”

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

添加equalshashCode实现,确保每个项目是唯一的应该解决问题。 似乎Kotlin数据类中的默认实现不会削减它:)

如果你不能或不会提供equalshashCode实现,我会建议使用cellFormat来代替,它不依赖于对象相等来产生一个唯一的单元格。

对不起,这在指南中没有说清楚,我将更新TableView部分,提供更多信息并警告使用cellCache

  • 不能与kotlin和tornadofx一起使用fontawesomefx
  • TornadoFX - 使用ContextMenu右键单击选项移除项目
  • 与TornadoFX一起使用第三方UI库
  • 如何在动态列表视图上安装点击处理程序(在tornadofx中)
  • 如何用java 7运行龙卷风fx hello world 7
  • TornadoFX:标签文字没有更新
  • TornadoFX:类型安全的CSS与其他库
  • Tornadofx tableview同步两个表
  • TornadoFX ItemViewModel更新如果支持对象,不公开JavaFX属性更改
  • 如何在TornadoFx中注入ItemViewModel
  • 在JavaFX TableView中平滑滚动
  • Kotlin language will be the best programming language for Android.