另一个控制器类中的访问控制器

时间:2015-10-20 13:00:22

标签: controller javafx-2

我的根布局包含2个布局: - OptionsPane - DrawArea

我正在尝试访问OptionsPaneController中的DrawAreaController以调用其draw方法。以下是OptionsPaneController的初始化方法:

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        newDragonButton.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

            @Override
            public void handle(MouseEvent event) {
                if(newDragonButton.getText().equals("Nowy")){
                    //do something
                }

                else{
                    newDragonButton.setText("Nowy");

                    FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
                    DrawAreaController dac = (DrawAreaController) loader.getController();
                    Dragon dragon = new Dragon(600, 300, 20, 2, 90, 270, colorChooser.getValue());
                    if(dac == null)
                        System.out.println("controller = null");
                    dac.drawDragon(dragon);
                }
            }
        });
    } 

不幸的是,dac始终为null。

我的代码中是否有任何错误,或者无法在另一个控制器中加载控制器?

1 个答案:

答案 0 :(得分:3)

控制器始终为null,因为您从不加载FXMLLoader。

load()加载fxml并为您实例化控制器实例。如果您在getController()之前未使用此方法,则会始终返回null

FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
Parent root = loader.load();
DrawAreaController dac = (DrawAreaController) loader.getController();

您可能想要也可能不想存储FXML的根目录。

相关问题