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 .

  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Las properties vinculadas no funcionan
  • TornadoFX - Creación de un layout MVP
  • TornadoFX envuelve las classs de dominio en ItemViewModel
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • En TornadoFX, ¿cómo puedo separar layouts en diferentes classs y luego usarlos en el generador?
  • ¿Cómo puedo refactorizar una vista para permitir el filtrado de elementos vinculados a un observable ArrayList dentro de una aplicación tornadofx?
  • Enlace de un model de dominio con campos anulables en ItemViewModel
  • Cómo mostrar datos usando la vista de tree de TornadoFX
  • Animación consecutiva en TornadoFX?
  • En TornadoFX, ¿cómo puedo vincular las properties de BigDecimal a otra propiedad de BigDecimal usando objectBinding?