Embarking on a Tic Tac Toe journey with JavaFX
This


GridPane board = new GridPane();
for (int row = 1, col = 1, cell = 0; row &lt;= 3; row++, col -=2) {
    board.add(cells[cell++], row, col++);
    board.add(cells[cell++], row, col++);
    board.add(cells[cell++], row, col);
}



just looks odd. The initialiszing of 3 variables , incrementing of one of then and decrementing one of them in one single for() is a little bit to much IMHO.  

how about using a more obvious loop like  

for (int cell = 0; cell &lt; cells.length; cell++) {
     board.add(cells[cell], cell / 3, cell % 3);
}


ok, one has to know if he/she reads this, that this will lead to  


  (0 , 0 , 0)
  (1 , 0 , 1)
  (2 , 0 , 2)
  (3 , 1 , 0)
  (4 , 1 , 1)
  (5 , 1 , 2)
  ...  


but it is less code without the strange incrementing and decrementing.  



The creation of the buttons should be improved. Like now you are creating a new Image for each button. Just create the Image once and reuse it like  

Image image = new Image("http://i.imgur.com/KAQPbPd.png");
Button[] cells = new Button[9];
for (int i = 0; i &lt; cells.length; i++) {
    cells[i] = new Button("", new ImageView(image);
    registerOnAction(cells[i]);
}  


much better now, ins't it ?