在加载新的fxml文件时初始化元素的值

时间:2017-06-05 06:16:17

标签: java javafx fxml

我在加载相应的FXML文件时尝试设置TextField的值,但是当我尝试在方法中的TextField上设置默认值时在加载FXML的地方,在writeBtnClick()方法的情况下,它会抛出NullPointerException

根据我的理解,在加载FXML之前不会初始化元素,因此无论出于何种原因,在加载FXML文件后,该元素仍然无法识别。

Controller.java

public class Controller implements Initializable {
    @FXML private TextField textField;

    public void initialize(URL arg0, ResourceBundle arg1) {

    }

    public void writeBtnClick(ActionEvent event) throws IOException {
        Stage stage = (Stage) ((Node)event.getSource()).getScene().getWindow();
        stage.setScene(new Scene((Parent) FXMLLoader.load(getClass().getResource("WriteScene.fxml"))));

        // the textfield I'm trying to set default value on
        // this throws a NullPointerException
        textField.setText("name");
    }

为了解决这个问题,我将setText()放在initialize()中,但当然如果在加载正确的fxml文件之前调用控制器类,也会导致NullPointerException

这是我能想到的最好的方法,但显然它非常脏,我觉得应该有一种方法来设置场景实际加载的writeBtnClick()方法的值。

public void initialize(URL arg0, ResourceBundle arg1) {
    // very hacky solution
    if (textField != null) {
        textField.setText("name");
    }
}

1 个答案:

答案 0 :(得分:-1)

我知道这听起来很疯狂,但是从控制器定义中移除implements Initializable,但请保留initialize方法。 Ther将不再是NPE了。

如果你仍然会在GUI元素上获得一些NPE,请仔细检查@fx:id标签,因为最有可能是拼写错误(区分大小写),并且充气机不会抱怨它。