将参数传递给 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()));
}
我有一个 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()));
}