我的程序的这个阶段有一个绘制到画布的地图,并提示用户选择他们想要放置项目的位置。
我设置了一个事件处理程序来记录鼠标点击的x,y坐标,但这是我只需要记录一次的东西。
这是我目前的事件处理程序:
EventHandler boatHandler = new EventHandler<javafx.scene.input.MouseEvent>(){
public void handle(javafx.scene.input.MouseEvent event){
newX = event.getSceneX();
newY = event.getSceneY();
System.out.printf("setOnMouseClicked X = %f, Y = %f\n", newX, newY);
newX = Math.round(newX/16) *16;
newY = Math.round(newY/16) *16;
System.out.printf("Rounded to multiple of 16 X = %f, Y = %f\n", newX, newY);
if(newX > 0 || newY > 0){
gc.drawImage(wItemset[0], newX, newY);
}
}
};
我希望事件处理程序在检索到x,y值后停止侦听,但我不确定如何。通过阅读其他问题,我发现我可以使用以下方法删除事件处理程序:
canvas.removeEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler);
但是这不能写在 if 语句中,所以我不确定如何触发它。
在记录了x,y值之后,我计划为另一个项目设置一个类似的代码块,我需要确保:
修改 这是我用来添加EventHandler
的行canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler);
答案 0 :(得分:5)
您可以在事件处理程序中触发它
它会是那样的
EventHandler boatHandler = new EventHandler<javafx.scene.input.MouseEvent>(){
public void handle(javafx.scene.input.MouseEvent event){
//code used for retrieving x,y values
canvas.removeEventHandler(MouseEvent.MOUSE_PRESSED, this);
}
}