从第二个控制器调用控制器方法(JavaFX)

时间:2018-04-03 16:04:17

标签: javafx

我对JavaFX很新,如果这看起来像是一个天真的问题,请提前道歉!所以我的应用程序在第一个控制器中初始化了一个tabPane,它是从主应用程序类加载的。每次按下下一个按钮时,我再次从第一个控制器加载了第二个控制器。我试图将主控制器中当前的Tabpane索引转换为辅助控制器,如下所示:

Second Controller.java -

MainTestController mainObject =new MainTestController(); 

    private void removeNullOrDeletedValues() {
            System.out.println("size of original list"+ownerList.size());
        int originalListSize = ownerList.size(); 
            currentTabIndex = mainObject.findCurrentTabIndex(); //this gives nullPointException

并且如上面的注释中所标记的,它给出了零点异常,并且在调试findCurrentTabIndex()时,inspect窗口将mainTabPane显示为null!

mainTestController.java -

  public int findCurrentTabIndex() {
        int tabIndex = mainTabPane.getSelectionModel().getSelectedIndex(); //mainTabPane shows null?!
        return tabIndex;
    }

这对我来说很奇怪,因为在调试模式下按下下一个按钮(加载第二个控制器)之前,同样的类会在鼠标悬停检查时给出mainTabPane的所有值和其他详细信息;就像在下面这个方法一样,它工作正常,mainTabPane不是null:

mainTestController.java -

@FXML
    private void nextTabAction() throws Exception {
        int tabIndex = mainTabPane.getSelectionModel().getSelectedIndex(); //this isn't null on debug inspection
            if(tabIndex==0 && dbAddedStatus==false) {       
                mainTabPane.getSelectionModel().selectNext(); 
                sendOverviewListToDatabase();
                CreateEntityTabs(tabIndex);
                currentTabHeadChange();
            }

我是否遗漏了一些重要的细节,例如一旦控制器失去焦点并且下一个加载,第一个控制器元素都变为空?

我知道nullPointException是什么以及它发生的原因。我想知道为什么mainTabPane只有在从第二个Controller调用后才为null!

1 个答案:

答案 0 :(得分:1)

您使用MainTestController mainObject =new MainTestController();创建一个新的Controller,但您需要将第一个Controller传递给第二个。

MainTestController的setter添加到SecondController并在加载FXML文件时调用它。

例如:(应该在MainTestController中)

FXMLLoader loader = new FXMLLoader(getClass().getResource("second.fxml"));
Pane pane = loader.load();
SecondController controller = (SecondController)loader.getController();
controller.setMainTestController(this);