Main: package be.vincent_nagy.oxo; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ FXMLLoader loader = new FXMLLoader(getClass().getResource("oxo.fxml")); Parent root = loader.load(); Scene mainScene = new Scene(root,600,600); primaryStage.setTitle("OXO Spel"); primaryStage.setScene(mainScene); primaryStage.show(); //Hier geef ik de controller toegang tot de main app. OxoController controller = loader.getController(); controller.setMain(this); } public static void main(String[] args) { launch(args); } } Controller: package be.vincent_nagy.oxo; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.layout.GridPane; public class OxoController { @FXML private GridPane mainGrid; @FXML private Button button5; @FXML private Button button3; @FXML private Button button2; @FXML private Button button4; @FXML private Button button6; @FXML private Button button7; @FXML private Button button8; @FXML private Button button9; @FXML private Button button1; //Referentie naar de main applicatie private Main main; //Constructor wordt opgeroepen voor de initialize() methode public OxoController(){ } //Deze methode wordt automatisch opgeroepen NADAT de FXML file geladen is. Vanaf hier heb ik dus toegang // tot de @FXML properties van deze controller @FXML private void initialize(){ } //Referentie naar de main applicatie. Aanroeping vanuit main public void setMain(Main main){ this.main = main; } @FXML void handleButtonAction(ActionEvent event) { if(event.getSource() instanceof Button){ Button src = (Button) event.getSource(); //send the src up to main or handle the game code here? } } } FXML: