我已经研究这部分代码一天了,只是不明白为什么它总是生成错误。
我有一个 Controller 和 FXML。他们工作得很好。然后我想到我想通过抽象 updateSelect() 函数重用这个特定的 Controller 。因此,我将 Controller 更改为抽象。
代码编译得很好。直到我尝试运行这部分代码。
@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
欢迎任何指导和建议,谢谢:)
最佳答案
我猜测您在抽象 Controller 类中有一个私有(private)处理程序方法。为了实现这项工作,我认为处理程序方法以及任何 @FXML 注释的字段都需要可由子类直接访问(即公共(public)或 protected ,或者默认可见性,如果子类与抽象 Controller 位于同一包中) )。
关于JavaFX : can controller be an abstract class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832599/