GridPane.getRowIndex
и GridPane.getColumnIndex
могут использоваться для определения строки / столбца.
Предполагая, что вы не перемещаете ячейки, просто делаете индексы / сама ячейка доступной для слушателя, как правило, проще:
@Override
public void start(Stage primaryStage) {
GridPane root = new GridPane();
int row = 0;
int column = 0;
for (int i = 0; i < 30; i++) {
Text text = new Text(Integer.toString(i + 1));
StackPane cell = new StackPane(text);
cell.setStyle("-fx-background-color: lightblue; -fx-border-width: 2; -fx-border-color: black; -fx-border-style: solid");
cell.setMinSize(50, 50);
root.add(cell, column, row);
final int rowFinal = row;
final int columnFinal = column;
cell.setOnMouseEntered(evt -> {
System.out.format("column=%d; row=%d; cell=%s\n", columnFinal, rowFinal, cell);
text.setText(text.getText() + "*");
});
cell.setOnMouseExited(evt -> {
String s = text.getText();
text.setText(s.substring(0, s.length() - 1));
});
column++;
if (column == 7) {
column = 0;
row++;
}
}
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
}