首页 文章

无法使用FXML形状连接Javafx控制器事件 . (JAVA)

提问于
浏览
0

我无法理解为什么这种超级,超级简单的方法不起作用 . 基本上我得到的是标准的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 回答

  • 2

    你做错了什么

    • 您使用的是错误的事件类型 .

    • 您没有从FXML引用您的事件处理程序 .

    • 您不应该尝试在事件处理程序中为这样的情况注册事件处理程序 .

    鼠标单击生成由onMouseClicked event handlers提供服务的MOUSE_CLICKED 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" /
    

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

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

相关问题