为什么我不能通过控制器传递值并不能在场景中显示?

时间:2018-10-24 12:56:05

标签: java javafx controller

这是将文本设置为标签的控制器。

@FXML
private Label label1;

public void two(ActionEvent event) throws IOException {

    Parent root = FXMLLoader.load(getClass().getResource("window2.fxml"));
    Scene switchEdit = new Scene(root);
    Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();

    stage.setScene(switchEdit);
    stage.show();
}

@Override
public void initialize(URL location, ResourceBundle resources) {


}

public void initData(String title) {
    label1.setText(title);
}

}

这是获取label1所需值的控制器。我设置了一个对象,并在第一个控制器上调用该方法以从文本字段传递值。

@FXML
private TextField txt;

public void goBack(ActionEvent event) throws IOException {
    FXMLLoader loader = new FXMLLoader();
    Parent roo = FXMLLoader.load(getClass().getResource("window.fxml"));
    Scene chEdit = new Scene(roo);
    Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();

    controller2 control = loader.getController();
    control.initData(txt.getText());


    stage.setScene(chEdit);
    stage.show();
}


}

我已经看过多个教程,但是没有用!

1 个答案:

答案 0 :(得分:1)

您通过静态FXMLLoader.load(URL)方法而不是使用FXMLLoader实例来加载fxml。

更改

FXMLLoader loader = new FXMLLoader();
Parent roo = FXMLLoader.load(getClass().getResource("window.fxml"));

FXMLLoader loader = new FXMLLoader(getClass().getResource("window.fxml"));
Parent roo = loader.load();

当然,这还需要在fx:controller的根元素中指定window.fxml属性。它的值应该是您的controller2类的完全限定名称。

PS:考虑遵守Java命名约定,并使用以大写字母开头的类型名称。