无法将 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 来识别它,对吧?
任何帮助表示赞赏,谢谢!
你做错了什么
- 您使用了错误的事件类型。
- 您没有引用您的
来自 FXML 的事件处理程序。
- 您不应该尝试注册一个
此类案例的事件处理程序中的事件处理程序。
鼠标点击生成 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);
}
我无法理解为什么这个超级简单的方法不起作用。基本上我得到的是标准的 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 来识别它,对吧?
任何帮助表示赞赏,谢谢!
你做错了什么
- 您使用了错误的事件类型。
- 您没有引用您的 来自 FXML 的事件处理程序。
- 您不应该尝试注册一个 此类案例的事件处理程序中的事件处理程序。
鼠标点击生成 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);
}