CellCache se representa inesperadamente en TableView con tornadoFX

Simplemente me desconcertó el uso de TornadoFX en TornadoFX con Kotlin . El renderizado siempre es extraño e inesperado, ¿qué pasa con eso? El código está aquí:

 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") } } } } } } } 

Espero que todas las filas aparezcan con una checkbox de checkbox en la columna "Sex" , pero el código anterior solo mostrará dos: una selected y otra unselected , ¿qué diablos está pasando con la cellcache ? También encuentro que cambiar la data class con la siguiente, y está bien:

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

Sin embargo, debo cambiar mucho con las properties de class de datos de esta manera, tampoco sé por qué. ¡Ayúdame y gracias de antemano!

cellCache crea una celda única por artículo en su list. Si sus artículos no implementan equals significativos y funciones hashCode , se encontrará con problemas con cellCache ya que la misma celda se usará para múltiples elementos subyacentes.

Agregar la implementación equals y hashCode que asegure que cada elemento sea único debería resolver el problema. Parece que la implementación pnetworkingeterminada en una class de datos de Kotlin no la corta 🙂

Si no puede o no va a proporcionar implementaciones equals y hashCode , le sugiero usar cellFormat en cellFormat lugar, que no depende de la igualdad de objects para producir una celda única.

Lamento que esto no quede claro en la guía, actualizaré la parte TableView con más información y una advertencia sobre el uso de cellCache .

  • ¿Cuál es la mejor práctica para crear un componente de IU personalizado en tornadofx?
  • Cómo ejecutar tornado fx hello world con java 7
  • ¿Cómo agregar leyenda secundaria al gráfico JavaFX?
  • Animación consecutiva en TornadoFX?
  • TornadoFX cómo enlazar Node style (o styleClass) a una propiedad?
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • Crea una vista arbitraria
  • TornadoFX - Creación de un layout MVP
  • Cómo instalar un controller de clics en una vista de list dinámica (en tornadofx)
  • java.lang.ClassNotFoundException: no encontró la class "com.my.app.example.Main" en la ruta: DexPathList