@FXML注释方法(按钮操作方法)中类中的对象为null

时间:2016-08-30 09:23:47

标签: java javafx javafx-2 javafx-8

在FXML带注释的按钮操作方法中,类中的对象值变为零。

我在课堂上声明了一个对象,如下所示,

private LoginData loginData;

在另一个舞台上,我调用方法switchStage(Stage, LoginData)来启动此阶段。方法是,

public void switchStage(Stage primaryStage, LoginData lDat) throws Exception{
        if(lDat!= null) {
            loginData = lDat;
            System.out.println("SwitchStage : " + lDat.getUserAccessType());
        } else {
            loginData  = new LoginData();
        }

        start(primaryStage);
    }

在start(Stage)方法中,我从FXML文件加载舞台。方法定义如下,

public void start(Stage primaryStage) throws Exception {
        System.out.println("Before FXML load : " + loginData.getUserAccessType());
        Parent root = FXMLLoader.load(getClass().getResource("/com/<package>/view/LoadFiles.fxml"));
        System.out.println("After FXML Load : " + loginData.getUserAccessType());
        Scene scene = new Scene(root);
        root.setStyle("-fx-border-color: black; -fx-border-width: 1px; ");

        if (!primaryStage.isShowing())
            primaryStage.initStyle(StageStyle.UNDECORATED);

        scene.getStylesheets().add(ReconcileinaLoadFilesController.class.getResource("/com/<package>/view/LoadFiles.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.centerOnScreen();
        System.out.println("Before Stage show : " + loginData.getUserAccessType());
        primaryStage.show();
        System.out.println("After Stage show : " + loginData.getUserAccessType());
    }

我可以看到上述每个println语句中保留的值。

我的FXML文件中有一个ToggleButton,动作方法定义(与上述方法在同一个类中)如下,

@FXML
public void settingsBtnAction() throws IOException{
    if(loginData != null) {
        System.out.println("Settings: " + loginData.getUserAccessType());
    } else {
        System.out.println("loginData is null"); // <--- code returns this everytime.
    }
}

这里发生了什么以及如何在ToggleButton的动作方法中保留对象loginData的值?我完全迷失了。

修改

我尝试在声明行中初始化对象,看起来它保留了此处的值,但它无法获得我手动设置的值。

private LoginData loginData = new LoginData(); //Gets me the value set in the constructor of the LoginData class.

0 个答案:

没有答案