我有一个带有 ListView 和一个按钮的“父”窗口。这个想法是单击按钮打开一个带有“接受”按钮的新“子”窗口(“父”窗口保持在后台)。
在“子”窗口中,我填充了一个 ArrayList,然后单击“确定”关闭“子”窗口并将 ArrayList 发送到“父”窗口。
我必须重复多次,直到我设法使用几个“子”窗口在“父”窗口中填充几个集合,所以我不能每次都创建一个新的“父”窗口。
这是我用来打开“子”窗口的代码:
private void anadirMateriales(){
abrirVentana("AnadirMateriales.fxml", "Añadir materiales");
}
public ArrayList<String> materiales = new ArrayList<>();
private void abrirVentana(String fxml, String titulo){
try {
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource(fxml));
Scene scene = new Scene(fxmlLoader.load());
Stage stage = new Stage();
stage.setTitle(titulo);
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
stage.showAndWait();
} catch (IOException ex) {
System.out.println("IO Exception: " + ex.getMessage());
}
}
在“子”窗口中,我唯一拥有的是填充名为“材料”的 ArrayList 的必要代码。
在此先感谢您的帮助,如果没有这个社区,我不知道该怎么办
我的建议是您在子窗口的控制器中实现一个方法,该方法接收一个列表类型的对象作为参数(例如
List
)。使用此方法,您可以将要填充的列表实例传递到子窗口(在您的情况下materiales
),当它关闭时,列表将包含您需要的数据。materiales
然后,在显示子视图之前,您必须获取对控制器的引用,并通过将列表实例 ( )传递给控制器来调用控制器中创建的方法。尽管已将 E.Betanzos 的答案标记为答案,因为它帮助我解决了我试图解决的问题,对此我也非常感激,但我遇到了一个类似的案例,由于某种原因我仍然没有知道,我无法将它发送给我然后在“子”窗口中操作的数据返回“父”窗口。
解决方案如下:
我希望这将有助于将来与我有同样问题的人。
一切顺利!