¿Cómo obtengo un número fijo de celdas de cambio de tamaño sin relleno en javafx?

Fondo:

Estoy trabajando en un visualizador para algorithms de planificación en time real. El 'mundo' se proporciona en un file de text, donde '_' es una celda libre, y '#' es una celda bloqueada. Lo siguiente es un ejemplo:

 41
 21
 ___________________ @ _____________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _ ####################################### _
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 _________________________________________
 ___________________ * _____________________

Es muy importante que la window tenga exactamente el mismo número de celdas en cada fila y el mismo número exacto de celdas en cada columna.

Tengo que visualizar en Kotlin, que es 100% interoperable con Java. Decidí probar javafx, versión 8.0.60. Después de investigar un poco sobre los layouts de javafx, decidí que TilePane era mi mejor opción.

Lo que tengo hasta ahora

Esto es lo que tengo hasta ahora. Si miras detenidamente, puedes ver una cantidad muy pequeña de relleno dentro de cada nodo del TilePane. A medida que el robot pasa de una pieza a otra, esta pequeña cantidad de relleno introduce un ligero error, ya que el robot se mueve utilizando el ancho y la altura de la pieza , sin tener en count el relleno. Esto hace que el robot no se encuentre en el centro de la losa mientras atraviesa el laberinto.

Además, mi solución depende mucho del tamaño de la window. Si lo ajusto ligeramente, el mundo se muestra incorrectamente porque cada fila y columna no tienen el mismo número de celdas fijas.

Preguntas:

Estas preguntas están en order de importancia.

  1. ¿Hay un layout o configuration que me proporcione un número fijo de células por fila y por columna? Mostrar el mundo depende de eso.
  2. ¿Cómo me deshago del relleno entre cada nodo en el layout?
  3. Si es posible, me gustaría cambiar el tamaño del layout, manteniendo las dos primeras invariantes. ¿Alguien sabe de una manera de hacer esto?

Partes relevantes de mi código:

Nota: robot.fill es lo mismo que llamar a robot.setFill, y Kotlin omite los types y la palabra key new al crear instancias de objects.

val root = TilePane(0.0, 0.0) /* The robot */ val robotWidth = TILE_WIDTH / 4.0 val robot = Rectangle(robotWidth, robotWidth) robot.fill = Color.ORANGE /* The robots starting location, needs to be drawn later */ var startX: Double? = null var startY: Double? = null for (y in 0..rowCount - 1) { val line = inputScanner.nextLine() for (x in 0..columnCount - 1) { when (line[x]) { '#' -> { val blocked = Rectangle(TILE_WIDTH, TILE_HEIGHT) blocked.fill = Color.BLACK //blocked.stroke = Color.BLACK root.children.add(blocked) } '_' -> { val free = Rectangle(TILE_WIDTH, TILE_HEIGHT) free.fill = Color.LIGHTSLATEGRAY free.opacity = .5 root.children.add(free) } '*' -> { val radius = TILE_WIDTH / 10.0 val dirtyCell = Circle(radius) //dirtyCell.stroke = Color.BLUE dirtyCell.fill = Color.BLUE root.children.add(dirtyCell) } '@' -> { startX = x * 1.0 startY = y * 1.0 root.children.add(robot) } } } }