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

Access controller in another controller class

我有包含 2 个布局的根布局: - 选项面板 - 绘制区域

我正在尝试访问 OptionsPaneController 中的 DrawAreaController 以调用其绘制方法。下面是 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 始终为空。

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

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

load() 加载 fxml 并为您实例化控制器实例。如果你在getController()之前不使用这个方法,它会一直returnnull

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

您可能想要也可能不想存储 FXML 的根..