java - 无法将 Javafx Controller 事件与 FXML 形状连接。 ( java )

标签 java model-view-controller javafx controller fxml

我无法理解为什么这个 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 来识别它,对吗?
任何帮助表示赞赏,谢谢!

最佳答案

你做错了什么

  1. 您使用了错误的事件类型。
  2. 您没有引用您的 来自 FXML 的事件处理程序。
  3. 您不应尝试注册 对于这种情况,事件处理程序中的事件处理程序。

鼠标点击生成MOUSE_CLICKEDonMouseClicked 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/

相关文章:

entity-framework - 对象层类型 'MyProject.Model.Applications' 已经有一个生成的代理类型

java - javaFX 任务返回的输入流为空

java - java中的非法状态异常

java - 我在尝试创建 XML 文件时不断出错

asp.net-mvc - "business logic layer"适合 MVC 应用程序的什么位置?

java - .Net 中的 Struts、JSF 等 MVC 框架

java - 具有模态的舞台隐藏最大化按钮

java - 循环依赖、递归类

java - 如何在 java swing 库中浏览文件?

java - SuperCSV - 将多列解析为列表