I'm happy to help convert it to Kotlin if you see something you like. StackPane might be tempting, but that can interfere with event processing . Notice the highlighting of the underlying board. If your chess board operates with a training mode, you might have an extended bordered graphic applied showing valid moves