Crea una vista arbitraria

Entonces, tengo un caso en el que necesito tener N filas en forma de: Label TextView/Checkbox . Tal vez tendré que tener más que esos dos puntos de vista, así que quiero ser capaz de soportar cualquier cosa que sea TornadoFx View .

Creé una interfaz que tiene un método que devuelve TornadoFx View y se ve así:

 interface ValueContainer { fun getView() : View } 

Una de las implementaciones se ve así:

 class BooleanValueContainer(val checked: Boolean) : ValueContainer { val valueProperty = SimpleBooleanProperty(checked) override fun getView(): View { return (object : View() { override val root = checkbox { bind(valueProperty) } }) } 

}

Ahora, cuando trato de usarlo dentro del bloque init , no se muestra en el layout. root es GridPane y parameters es una list de objects que tienen nombre y reference a la implementación de BooleanValueContainer ( BooleanValueContainer u otro que no he mostrado):

 init { with(root) { parameters.map { row(it.name) { it.parameterContainer.getView() } } } } 

Estoy atrapado aquí por bastante time y he intentado con todo lo que pude encontrar pero nada funcionó, excepto poner textview o checkbox block en lugar de getView() llamar, pero luego tendría que tener lógica sobre qué vista debería mostrar dentro esta class que representa una vista y no quiero eso.

La razón por la que esto no funciona para usted es que simplemente llama a parameterContainer.getView() pero no agrega la vista a la fila. Creo que lo que te confunde es que, para los constructores, puedes decir label() por ejemplo, y se agrega al Nodo actual en el tree del constructor. En su caso, solo dice Label() (simplemente cree una instancia de Label, no llame al generador de tags), que crearía una nueva label, pero no la agregaría a la list de elementos secundarios del nodo actual. Para resolver su problema, haga lo siguiente:

 this += it.parameterContainer.getView() 

Esto agregará la Vista a la fila.

Aparte de esto, no veo el sentido del ValueContainer. ¿Qué soluciona para poner una Vista dentro de este object contenedor? Sospecho que esto también puede deberse a un malentendido y me gustaría entender por qué sientes que necesitas este constructo.

  • ¿Hay alguna manera de vincular una propiedad a appConfig en tornadofx?
  • Cómo implementar TornadoFX WebEngine Callback en Kotlin
  • Tornadofx - controlando el object de la fila de la vista de tabla mientras construye
  • El text de la label no se actualiza aunque el hilo de la interfaz de usuario parece responder
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX
  • ¿Cómo cancelar la suscripción a events en TornadoFX?
  • TornadoFX - eliminar elemento con ContextMenu hacer clic derecho
  • ¿Cómo puedo crear un encabezado de columna nested / dividido usando TornadoFx?
  • Forma de configurar las properties de PrimaryStage o Scene en TornadoFX
  • Cómo crear una pantalla de inicio en tornadofx
  • En TornadoFX, ¿cómo puedo separar layouts en diferentes classs y luego usarlos en el generador?