我有两个控制器searchController.java(我们称其为A)和searchResultController(B)。搜索表单位于A中,我在其中搜索客户端数据,然后将匹配的客户端数据发送到B,以便可以将结果显示在控制器为B的文件searchResult.fxml中。
我知道有人问过有关将数据从控制器传递到控制器的问题。我的与众不同的是,我在文件B中使用了initialize()方法,该方法在调用initData函数之前先被调用。我是Java的新手,我正在尝试在文件B中创建一个tableView元素以包含clientData。问题是,我学会了如何显示表格的方法是在initialize()方法中创建表格,以便在页面加载后立即显示该表格。这给我带来两个问题: 我)我可以创建一个tableView并在页面加载时显示它而不使用 initialize()方法? ii)我可以将clientData传递给initialize()方法吗?如果可以,怎么办?
希望这是有道理的。如果以上任何一种可能,那么我的问题将得到解决。所以我在A中的代码是这样的:
clientInfo = list.searchForClient(clientId);
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("searchResult.fxml"));
Parent searchResultParent = loader.load();
Scene searchResultScene = new Scene(searchResultParent);
SearchResultController controller = loader.getController();
//This test below works (showing the client data i want to pass on)
System.out.println("About to pass clientInfo to searchResultController:"+clientInfo.get(0).getName());
controller.initData(clientInfo);
Stage stage = (Stage) ((Node) e.getSource()).getScene().getWindow();
stage.setScene(searchResultScene);
stage.show();
我的searchResultController.java(B)代码如下:
public class SearchResultController implements Initializable {
private ArrayList<Client> clientData = new ArrayList<Client>();
public void initData(ArrayList<Client> clientData) {
//This does not print to the console
System.out.println("From initData of searchResultController and clients name is: "+clientData.get(0).getName());
this.clientData = clientData;
}
@Override
public void initialize(URL location, ResourceBundle resources) {
//This gives me a java.lang.IndexOutOfBoundsException, and that is obviously because clientData contains nothing in it
System.out.println("From initialize of searchResultController and here's the client info: "+clientData.get(0).getName());
}
}
我尝试了其他一些方法,但我没有足够的尝试方法。我想念什么?