我试图制作一个简单的面板,显示在一个网格中,它会在点击时做出反应,但无论我做什么,javafx似乎都无法将FXML连接到控制器类。
我有一个非常简单的FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="50.0" prefWidth="50.0" xmlns="http://html" target="_blank">javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="genmatfx.MaterialGridPanelController">
<children>
<BorderPane layoutX="-86.0" layoutY="-75.0" onMouseClicked="#handleOnMouseClicked" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<center>
<ImageView fx:id="MatView" onMouseClicked="#handleOnMouseClicked" pickOnBounds="true" preserveRatio="true" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
</children>
</AnchorPane>
在控制器类(MaterialGridPanelController.java)中,有一个简单的事件来捕捉鼠标点击:
@FXML
public void handleOnMouseClicked(ActionEvent event) {
Parent.TriggerMaterialUsed(this, DisplayedMaterial);
}
经过一些研究,我发现使用FXMLLoader的静态加载程序方法存在问题,因此我已经使用了FXMLLoader的一个实例来创建如下面板:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MaterialGridPanel.fxml"));
AnchorPane pane = (AnchorPane) loader.load();
MaterialGridPanelController controller = loader.<MaterialGridPanelController>getController();
controller.SetMaterial(this, AvailiableMaterials.get(matName));
GridPane.setHalignment(pane, HPos.CENTER);
GridPane.setValignment(pane, VPos.CENTER);
grid.add(pane, col, row);
但无论我做什么,运行程序时都会出现异常,告诉我无法找到click事件的方法:
Controller method "handleOnMouseClicked" not found.
file:/C:/.../dist/run309258243/GenMatFX.jar!/genmatfx/MaterialGridPanel.fxml:14
at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:492)
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:589)
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2430)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2136)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
控制器可以工作,我确实把ImageView放在了一个私有字段上,所以问题不是找不到控制器类。此外,当我在最新的场景生成器中加载FXML时,我可以在事件下拉列表中选择此方法,因此场景生成器似乎能够连接。
有人有主意吗?
鼠标单击不是ActionEvent,而是MouseEvent,因此找不到handleOnMouseClicked方法,因为它的类型参数错误。
应该是:
@FXML
public void handleOnMouseClicked(MouseEvent event) {
. . .
}
问题内容: 我正在编写小型且非常干燥的框架,该框架高度依赖元数据。我想知道是否有一种方法来获取方法参数名称,即给定一些方法 得到的字符串和。 我知道我可以注释参数,但是那不是很好。 问题答案: 我们为包含参数名称的String[]的方法创建了一个自定义注释。与必须注释每个单独的参数相比,此方法感觉易于管理。我们计划添加构建时检查,以确保带注释的参数名称的数量与参数的数量匹配,因为这是我们所需要的。
问题内容: 如标题所述,是否有一种简单的方法可以将两列输出到Java中的控制台? 我知道,但是在使用printf时,我还没有找到基于特定列进行空间分配的方法。 问题答案: 使用宽度和精度说明符,将其设置为相同的值。这将填充太短的字符串,并截断太长的字符串。“-”标志将使列中的值左对齐。
本文向大家介绍Asp.net MVC中获取控制器的名称的方法,包括了Asp.net MVC中获取控制器的名称的方法的使用技巧和注意事项,需要的朋友参考一下 1、视图中 2、控制器的action中 3、过滤器中 比如在ActionFilterAttribute中,这个时候一般是自己实现一个继承类,然后重写相关的方法。 在重写的方法中如果需要控制器的名称。 4、公共方法中 以上所述是小编给
你有没有办法把它自动化?还有更多的方法是这样构造的。我在这里什么也不会有。这样做有意义吗,就像我想象的那样?
我使用SpringBoot 1.5.9并创建了: 我的简单控制器正在处理“/”并转发到index.html: 根据SpringBoot文档,应该呈现下的静态内容。如果创建文件夹并将我的放在那里,并在pom.xml中包含spring-boot-starter-thymeleaf依赖项,那么一切都很好。但是,我很困惑为什么src/main/resources/static/index.html的基本呈
在我添加了一个Spring Security过滤器后,这就停止工作了。 部署应用程序时,映射按预期配置 提交GET请求。 请求参数是由ExtJS添加的,这不是一个问题,因为它在没有安全性的情况下工作。