繁体   English   中英

如何删除事件处理程序?

[英]How to remove an event handler?

我程序的此阶段有一个绘制到画布上的地图,并提示用户选择他们想要放置项目的位置。

我设置了一个事件处理程序来记录鼠标单击的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值后,我计划为另一个项目准备一个类似的代码块,并且需要确保:

  1. 放置正确的物品
  2. x,y值用于该项目,而不是前一个项目

编辑:这是我用来添加EventHandler的行

canvas.addEventHandler(MouseEvent.MOUSE_PRESSED, boatHandler);

您可以在事件处理程序中触发它

会像那样

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);

        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM