【发布时间】:2016-12-07 19:31:12
【问题描述】:
我的程序的这个阶段有一个绘制到画布上的地图,并提示用户选择他们希望放置项目的位置。
我设置了一个事件处理程序来记录鼠标单击的 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 值后,我计划为另一个项目创建类似的代码块,我需要确保:
- 放置了正确的物品
- x,y 值适用于该项目,而不是前一个项目
编辑: 这是我用来添加 EventHandler 的行
canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler);
【问题讨论】: