【问题标题】:Access controller in another controller class另一个控制器类中的访问控制器
【发布时间】:2015-10-20 13:00:22
【问题描述】:

我有包含 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 始终为空。

我的代码有错误还是无法在另一个控制器中加载控制器?

【问题讨论】:

    标签: controller javafx-2


    【解决方案1】:

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

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

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

    您可能希望也可能不希望存储 FXML 的根..

    【讨论】:

    • 感谢@ItachiUchiha 的回答。
    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2015-10-31
    相关资源
    最近更新 更多