简体   繁体   中英

How to access a variable from one class controller file to another in JavaFX?

So I have an integer number called "size" saved to a controller class called SettingsStageController.java and I want that variable to be accessed through my other controller class file called GameStageController.java but I can't seem to find out how.

SettingsStageController.java

/* has the int size variable stored in this file */
int size = 5;

public void startGame(ActionEvent event) throws IOException {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("gameStage.fxml"));
        root = loader.load();
        stage = (Stage) ((Node) event.getSource()).getScene().getWindow(); // ti ston poutso
        scene = new Scene(root);
        stage.setTitle("DnB: " + Integer.toString(size) + "x" + Integer.toString(size) + " Game");
        stage.setScene(scene);
        stage.show();

        GameStageController gameStageController = loader.getController();
        gameStageController.showPane();

    }

GameStageController.java

    public class GameStageController implements Initializable {
    
    
    @FXML
    Text testText;

    @FXML
    AnchorPane twoXtwoPane;
    
    @FXML
    AnchorPane threeXthreePane;
    
    @FXML
    AnchorPane fourXfourPane;
    
    @FXML
    AnchorPane fiveXfivePane;
    
    
    public void showPane() {
        switch (/* I WANT TO PUT THE "SIZE" NUMBER HERE" */) {
            case 2:
                twoXtwoPane.setDisable(false);
                twoXtwoPane.setVisible(true);
                break;
            case 3:
                threeXthreePane.setDisable(false);
                threeXthreePane.setVisible(true);
                break;
            case 4:
                fourXfourPane.setDisable(false);
                fourXfourPane.setVisible(true);
                break;
            case 5:
                fiveXfivePane.setDisable(false);
                fiveXfivePane.setVisible(true);
                break;
            default:
                twoXtwoPane.setDisable(false);
                twoXtwoPane.setVisible(true);
                break;
        }
    } 
}

If a method needs data to perform its functionality, then that data should be a parameter to the method. You should do:

public class GameStageController implements Initializable {

    // ...

    public void showPane(int size) {
        switch (size) {
            // ...
        }
    }
}

and then of course

private int size = 5;

public void startGame(ActionEvent event) throws IOException {

    // ...

    GameStageController gameStageController = loader.getController();
    gameStageController.showPane(size);

}

If your GameStageController instance needs the size variable later on, you can create an instance variable in that class, and set it in the showPane method to the value passed as the parameter.

You just need to make it static so you can access it using the class name directly and if your controllers are in different packages you need to add public because by default the visibility is package.

So you have to declare size like this :

public static int size = 5;

To access it you do :

SettingsStageController.size

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM