JavaFX:控制器可以是一个抽象类吗?

时间:2014-04-03 08:58:17

标签: java controller javafx-2 javafx-8 fxml

我已经在这部分代码上工作了一天,但却无法弄清楚为什么它总会产生错误。

我有一个控制器和FXML。他们工作得很好。然后我想到我想用一个抽象的updateSelect()函数重用这个特定的控制器。因此,我将控制器更改为抽象。

编译的代码很好。直到我尝试运行这部分代码。

@FXML
private void mnuProjMember_onClick(ActionEvent event) {
    mainContent.getChildren().clear();
    FXMLLoader loader = new      FXMLLoader(getClass().getResource("PaneProjectSearch.fxml"));

    PaneProjectSearchController controller = new PaneProjectSearchController(){
        @Override
        void updateSelect(){
            System.out.println("update: !!");
        }
    };

    loader.setController(controller);
    controller.setParent(mainContent);
    fitToParent(loader);
}

它给出了以下错误消息。嗯...这是没有意义的,因为在删除抽象部分后,代码将再次正常工作,甚至没有触及FXML或其他功能。

解析onAction ='#btnAdd_onClick'时出错,要么事件处理程序不在命名空间中,要么脚本中有错误。 文件:/ d:/NetBeansWork/ProjCostTracking/dist/run1210215635/ProjCostTracking.jar /ProjCostTracking/PaneProjectSearch.fxml:20

欢迎任何指导和建议,谢谢:)

1 个答案:

答案 0 :(得分:4)

我猜测你在抽象控制器类中有一个私有的处理程序方法。为了使这个工作,我认为处理程序方法,以及任何@ FXML注释字段,需要由子类直接访问(即公共或受保护,或默认可见性,如果子类与抽象控制器在同一个包中)。