TornadoFX reemplaza el layoutChildren en la región

Estoy tratando de traducir esta class JavaFX a TornadoFX. Hover no soy capaz de descubrir cómo se debe hacer el protected void layoutChildren() con TornadoFX.

Este es el código que tengo hasta ahora:

 class ReversiSquare(x: Int, y: Int) : View() { var x by property(x) fun xProperty() = getProperty(ReversiSquare::y) var y by property(y) fun yProperty() = getProperty(ReversiSquare::y) var highlight: Region by singleAssign() var highlightTransition: FadeTransition by singleAssign() val model = ReversiModel override val root = region { region { opacity = 0.0 style = "-fx-border-width: 3; -fx-border-color: dodgerblue" highlight = this } // todo not sure this works with singleAssign highlightTransition = FadeTransition(Duration.millis(200.0), highlight).apply { fromValue = 0.0 toValue = 1.0 } styleProperty().bind(Bindings.`when`(model.legalMove(x, y)) .then("-fx-background-color: derive(dodgerblue, -60%)") .otherwise("-fx-background-color: burlywood")) val light = Light.Distant().apply { azimuth = -135.0 elevation = 30.0 } effect = Lighting(light) setPrefSize(200.0,200.0) this += highlight addEventHandler(MouseEvent.MOUSE_ENTERED_TARGET) { if(model.legalMove(x ,y).get()) { with(highlightTransition) { rate =1.0 play() } } } addEventHandler(MouseEvent.MOUSE_EXITED_TARGET) { with(highlightTransition) { rate = -1.0 play() } } onDoubleClick { model.play(x, y) highlightTransition.rate = -1.0 highlightTransition.play() } } } 

No estoy seguro de lo que quiere decir al traducir a TornadoFX, pero escribir el layoutChildren en Kotlin sería algo como esto:

 override fun layoutChildren() { layoutInArea(highlight, 0.0, 0.0, width, height, baselineOffset, HPos.CENTER, VPos.CENTER); } 

EDITAR: Actualizaste el ejemplo de código a una Vista, así que creo que entiendo lo que quieres ahora 🙂

Primero, asegúrese de que la Vista no requiera parameters, porque eso imposibilitaría la inyección de esta vista. Pase los parameters usando by param() o mejor aún, inyecte un ViewModel en el scope de View, e inyecte ese ViewModel en su View.

¿Tal vez puede agregar xey como properties a ReversiModel?

Si necesita crear una región personalizada, puede crear lo que sería un equivalente de class interna anónimo, en Java speak:

 class ReversiSquare : View() { val model: ReversiModel by inject() override val root = object : Region() { // ... override fun layoutChildren() { layoutInArea(highlight, 0.0, 0.0, width, height, baselineOffset, HPos.CENTER, VPos.CENTER); } } } 

Para abrir esta Vista ahora, cree un nuevo ámbito y presione ReversiModel en él:

 // Create the model, set x, y and other initial state in the model val model = ReversiModel() model.x = 42 // Create a new scope and push the ReversiModel into it val scope = Scope(model) // Find the ReversiSquare in the new scope find<ReversiSquare>(scope) { // Do something with the sequare, like openWindow() or similar } 
  • TableView de Tornadofx usando comboBox y agregando FXEvent en los botones
  • Tornadofx - Cómo pasar el parámetro a Fragment en cada instancia
  • Cómo ejecutar tornado fx hello world con java 7
  • Cómo inyectar ItemViewModel en tornadoFx
  • TornadoFX filechooser
  • TornadoFX: el text de la label no se actualiza
  • Lanzar una aplicación TornadoFX desde (un progtwig existente) de Kotlin
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • ¿Cómo cancelar la suscripción a events en TornadoFX?
  • Tornadofx Javafx - Cómo volver a cargar una vista / componente
  • TornadoFX - eliminar elemento con ContextMenu hacer clic derecho