我无法理解为什么这种超级,超级简单的方法不起作用 . 基本上我得到的是标准的MVC设置 - 所以我有一个控制器来控制我的布局(FXML文件) . 在FXML中,我创建了各种形状,以确定它是否特别是形状问题(它不是......) . 我只想在我的控制器中将一个方法附加到我的FXML中的一个形状,使得计数器每次单击形状增加1,并将当前计数输出到控制台 . 它不起作用!
这是相关的代码:
(控制器类)
@FXML Sphere asteroid;
private int counter = 0;
@FXML void addRandomResource(ActionEvent event) {
asteroid.setOnMousePressed(new EventHandler<MouseEvent>(){
public void handle(MouseEvent event){
counter += 1;
System.out.println(counter);
}
});
}
(FXML)
<Sphere fx:id="asteroid" layoutX="250.0" layoutY="300.0" radius="125.0" />
我知道控制器已正确连接,因为页面上的其他按钮工作...所以's not the issue. And I can' t将"onAction"属性添加到一个形状,这样它应该能够使用fx:id识别它,对吧?
任何帮助表示赞赏,谢谢!
1 回答
你做错了什么
您使用的是错误的事件类型 .
您没有从FXML引用您的事件处理程序 .
您不应该尝试在事件处理程序中为这样的情况注册事件处理程序 .
鼠标单击生成由onMouseClicked event handlers提供服务的MOUSE_CLICKED MouseEvents . ActionEvents用于其他目的,例如按钮点火 .
如何修复程序以处理单击事件
在您的fxml中,您需要reference your controller's click event handler:
在您的控制器中,您需要使用正确的签名来接受事件: