这是将文本设置为标签的控制器。
@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();
}
}
我已经看过多个教程,但是没有用!
答案 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命名约定,并使用以大写字母开头的类型名称。