无法将 Javafx 控制器事件与 FXML 形状连接。 (Java)

Unable to connect Javafx controller event with FXML shape. (Java)

我无法理解为什么这个超级简单的方法不起作用。基本上我得到的是标准的 MVC 设置——所以我有一个控制器来控制我的布局(FXML 文件)。在 FXML 中,我创建了各种形状以查看它是否特别是形状的问题(不是......)。我只想将我的控制器中的一个方法附加到我的 FXML 中的一个形状,该方法会导致每次单击该形状时计数器增加 1,并将当前计数输出到控制台。它不工作!

相关代码如下:
(控制器 class)

@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" />  

我知道控制器已正确连接,因为页面上的其他按钮可以正常工作...所以这不是问题所在。而且我无法将 "onAction" 属性 添加到形状中,所以它应该能够使用 fx:id 来识别它,对吧?
任何帮助表示赞赏,谢谢!

你做错了什么

  1. 您使用了错误的事件类型。
  2. 您没有引用您的 来自 FXML 的事件处理程序。
  3. 您不应该尝试注册一个 此类案例的事件处理程序中的事件处理程序。

鼠标点击生成 MOUSE_CLICKED MouseEvents which are serviced by onMouseClicked event handlers. ActionEvents 用于其他目的,例如按钮触发。

如何修复程序以处理点击事件

在您的 fxml 中,您需要 reference your controller's click event handler:

<Sphere fx:id="asteroid" onMouseClicked="#addRandomResource" layoutX="250.0" layoutY="300.0" radius="125.0" /

在您的控制器中,您需要使用正确的签名来接受事件:

@FXML void addRandomResource(MouseEvent event) {
    counter += 1;
    System.out.println(counter);
}