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 } 
  • No se puede usar fontawesomefx con kotlin y tornadofx
  • Enlace de un model de dominio con campos anulables en ItemViewModel
  • java.lang.ClassNotFoundException: no encontró la class "com.my.app.example.Main" en la ruta: DexPathList
  • TornadoFX cómo enlazar Node style (o styleClass) a una propiedad?
  • Cómo inyectar ItemViewModel en tornadoFx
  • TornadoFx: que realiza mejor FXML o type-CSS
  • Kotlin y TornadoFX: ¿une una propiedad observable a una function de recostackción?
  • preguntas sobre DI, ViewModel, etc.
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • ¿Por qué mi escena es nula?
  • Cómo cambiar la vista en TornadoFx