将参数传递给 javafx 控制器方法不起作用

Passing parameters to javafx controller method not working

我有一个 Pane 组件存储在 fxml 文件中。我正在将此组件导入另一个场景,我希望此组件显示自动生成的信息。所以我搜索了这个确切的问题,我发现了这个:Passing parameters to a controller when loading an FXML。他们是这样做的:

 private void addReservation(Reservation r) {
        try {
            FXMLLoader fxmloader = new FXMLLoader(getClass().getResource("/views/item_reserva.fxml"));
            Pane client = (Pane) fxmloader.load();
            Item_reservaController controller = fxmloader.<Item_reservaController>getController();
            controller.init(r);
            flowPane.getChildren().add(client);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

在本例中,我正在将组件加载到 Parent 类型 Pane。然后我调用它的控制器并初始化组件,最后在 Flowpane.

中显示 Pane

这是 init 方法的作用:

public void init(Reservation r) {
    this.reservation = r;
    labelCountry = new Label(r.getClients().getFirst().getCountry());
    labelRoom = new Label(Integer.toString(r.getRooms().size()));
    labelClient = new Label(Integer.toString(r.getClients().size()));
}

我猜问题是因为我画的对象和我改的控制器不一样,所以不会改变真实组件里面的信息。

由于 init 方法是在加载 fxml 后调用的,因此不太可能将在该方法中创建的 Label 添加到场景中。

And no the labels are already defined in the fxml file.

由于场景已经包含适当的 Label,请使用这些 Label 而不是创建新的。如果Label成功注入controller,直接使用setText赋值内容:

public void init(Reservation r) {
    this.reservation = r;
    labelCountry.setText(r.getClients().getFirst().getCountry());
    labelRoom.setText(Integer.toString(r.getRooms().size()));
    labelClient.setText(Integer.toString(r.getClients().size()));
}