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.

  • TornadoFX cómo agregar validation al editar TableView
  • No se puede usar fontawesomefx con kotlin y tornadofx
  • Lanzar una aplicación TornadoFX desde (un progtwig existente) de Kotlin
  • TornadoFX filechooser
  • Usar bibliotecas de UI de terceros con TornadoFX
  • Columnas de tabla dinámica
  • La compilation de Gradle no puede encontrar tornadofx en Linux
  • TornadoFX: el text de la label no se actualiza
  • Animación consecutiva en TornadoFX?
  • Cómo configurar una aplicación Gluon con Kotlin y Tornado FX
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia