如何在 JavaFX 中从一个 class 控制器文件访问另一个变量?

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

所以我将一个名为“size”的整数保存到一个名为 SettingsStageController.java 的控制器 class 中,我希望通过我的另一个控制器 class 文件名为 GameStageController.java,但我似乎无法找到方法。

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;
        }
    } 
}

你只需要把它设为静态,这样你就可以直接使用 class 名称访问它,如果你的控制器在不同的包中,你需要添加 public 因为默认情况下可见性是 package .

所以你必须像这样声明大小:

public static int size = 5;

要访问它,您需要:

SettingsStageController.size

如果一个方法需要数据来执行其功能,那么该数据应该是该方法的参数。你应该这样做:

public class GameStageController implements Initializable {

    // ...

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

当然还有

private int size = 5;

public void startGame(ActionEvent event) throws IOException {

    // ...

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

}

如果您的 GameStageController 实例稍后需要 size 变量,您可以在 class 中创建一个实例变量,并在 showPane 方法中将其设置为作为参数传递的值。