我无法理解为什么这个 super super 简单的方法不起作用。基本上我所拥有的是标准 MVC 设置 - 所以我有一个 Controller 来控制我的布局(FXML 文件)。在 FXML 中,我创建了各种形状来查看是否是特定形状的问题(不是......)。我只想将 Controller 中的一个方法附加到 FXML 中的形状,该方法会导致每次单击形状时计数器增加 1,并将当前计数输出到控制台。这不工作!
相关代码如下:
( Controller 类)
@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" />
我知道 Controller 已正确连接,因为页面上的其他按钮可以工作......所以这不是问题。我无法向形状添加“onAction”属性,因此它应该能够使用 fx:id 来识别它,对吗?
任何帮助表示赞赏,谢谢!
最佳答案
你做错了什么
- 您使用了错误的事件类型。
- 您没有引用您的 来自 FXML 的事件处理程序。
- 您不应尝试注册 对于这种情况,事件处理程序中的事件处理程序。
鼠标点击生成MOUSE_CLICKED由 onMouseClicked event handlers 提供服务的 MouseEvents 。 ActionEvents用于其他目的,例如按钮触发。
如何修复程序以处理点击事件
在您的 fxml 中,您需要 reference your controller's click event handler :
<Sphere fx:id="asteroid" onMouseClicked="#addRandomResource" layoutX="250.0" layoutY="300.0" radius="125.0" /
在您的 Controller 中,您需要使用正确的签名来接受事件:
@FXML void addRandomResource(MouseEvent event) {
counter += 1;
System.out.println(counter);
}
关于java - 无法将 Javafx Controller 事件与 FXML 形状连接。 ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37504157/