将数据从一个控制器传递到另一个在JavaFX中不起作用的控制器

时间:2019-02-14 22:56:01

标签: java javafx fxml

我有两个控制器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());
  }

}

我尝试了其他一些方法,但我没有足够的尝试方法。我想念什么?

0 个答案:

没有答案