Hi everyone ! I am trying to build a Grid of cells...
# tornadofx
l
Hi everyone ! I am trying to build a Grid of cells dynamically, but all I get is an empty Window. What's wrong with my code ?
Copy code
package com.developpez.tictactoe

import javafx.geometry.Insets
import javafx.scene.layout.GridPane
import tornadofx.*
import java.lang.IllegalStateException

class TicTacToeApp : App(Board::class)

open class CellValue
class Empty: CellValue()
class Cross: CellValue()
class Circle: CellValue()

data class CellClickedEvent(val row: Int, val col: Int) : FXEvent()

class Board : View("Tic Tac Toe") {

    var cellsValues: Array<Array<CellValue>> = Array(3) {Array(3) {Empty()}}
    var currentPlayer: CellValue = Cross()

    init {
        subscribe<CellClickedEvent> {
            if (cellsValues[it.row][it.col] == Empty()) {
                cellsValues[it.row][it.col] = currentPlayer
                refreshContent()
                currentPlayer = when (currentPlayer) {
                    is Cross -> Circle()
                    is Circle -> Cross()
                    else -> throw IllegalStateException("Current player is not defined.")
                }
            }
        }
    }

    private fun refreshContent() {
        root.children.removeAll()
        buildContent()
    }

    private fun buildContent()  {
        with (root) {
            repeat(3) { row ->
                row {
                    apply {
                        repeat(3) { col ->
                            button {
                                gridpaneConstraints {
                                    margin = Insets(2.0)
                                    setPrefSize(100.0, 100.0)
                                }
                                action {
                                    fire(CellClickedEvent(row, col))
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    override val root = GridPane()
}