有没有办法从保留event handler
的{{1}}调用fxml file
方法?请找到文件:
我的Fxml看起来像:
parameter
我的控制器类看起来像
<?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="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.cognizant.iotworkbench.View.AddImageController">
<children>
<Label layoutX="270.0" layoutY="14.0" text="Add Sensor" />
<BorderPane layoutY="-1.0" prefHeight="400.0" prefWidth="602.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<left>
<HBox fx:id="source" prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER">
<children>
<ImageView fx:id="sourceimg" fitHeight="114.0" fitWidth="142.0" onDragDetected="#setUpGestureSource" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="file:Images/Project.png" />
</image>
</ImageView>
</children>
</HBox>
</left>
<right>
<HBox fx:id="target" onDragDropped="#setUpGestureTarget" onDragOver="#setUpGestureTarget" prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</right>
</BorderPane>
</children>
</AnchorPane>
拖放事件未被触发。我不知道代码有什么问题。请帮忙
答案 0 :(得分:0)
所有使用@FXML
注释的方法可能有也可能没有都有参数。如果您需要参数,可以直接将specific Event
作为参数传递给方法。
让我们举一个例子,说你在fxml中为HBox添加了onDragOver
个事件。
<HBox fx:id="targetBox" onDragOver="#setupGestureTarget">
...
</HBox>
然后你可能有一个方法可以在控制器类中完成所需的工作。
@FXML
public void setupGestureTarget(DragEvent event) {
Dragboard db = event.getDragboard();
if(db.hasImage()){
event.acceptTransferModes(TransferMode.COPY);
}
event.consume();
}
如果您需要为其调用方法的源节点,您可以通过事件getSource()
获取对该节点的访问权限,然后将其键入c Node
。
public void setupGestureTarget(DragEvent event) {
...
((Node)event.getSource()).setId("myHbox");
System.out.println(targetBox.getId()); // Prints - myHbox
}
注意:要使用特定于HBox
的方法,您可以将其输入到HBox
而不是Node
。
您的方法存在多个问题。让我解决所有问题。
1.注释了@FXML
的字段的注释会在FXML加载时被注入,并且不应带有new
个关键字。
@FXML
final HBox target=new HBox();
应替换为
@FXML
final HBox target;
2.正如我已经说过,你的方法可以有一个定义Event的参数。因此,方法setUpGestureSource()
和setUpGestureTarget()
可以定义为:
@FXML
public void setUpGestureSource(DragEvent event) {
...
}
@FXML
public void setUpGestureTarget(DragEvent event) {
...
}
3.当setUpGestureSource
上出现drag-event
时,会调用方法ImageView
,因此您无需添加另一个 {{ 1}}为它。
EventHandler
同样,也可以更改其他方法。