Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在IntelliJ的JavaFx中使用java EventFilters时,它似乎只是在添加EventFilters,而不是在场景中删除它们?_Java_Intellij Idea_Javafx - Fatal编程技术网

在IntelliJ的JavaFx中使用java EventFilters时,它似乎只是在添加EventFilters,而不是在场景中删除它们?

在IntelliJ的JavaFx中使用java EventFilters时,它似乎只是在添加EventFilters,而不是在场景中删除它们?,java,intellij-idea,javafx,Java,Intellij Idea,Javafx,例如,我使用javaFx场景,添加一个平面对象,然后添加具有所需导弹图像的组,然后添加场景。现在,当我在移动导弹的场景中添加一个事件过滤器,然后将其删除后,该场景在运行时仍会响应键盘按下moveMissle()事件过滤器。此外,如果添加事件筛选器,它还不会使用remvoveEventFilter方法删除它们。它不应该删除它,因为我编码删除事件过滤器,所以它不响应任何键吗?多谢各位 public class Main extends Application { @Override

例如,我使用javaFx场景,添加一个平面对象,然后添加具有所需导弹图像的组,然后添加场景。现在,当我在移动导弹的场景中添加一个事件过滤器,然后将其删除后,该场景在运行时仍会响应键盘按下moveMissle()事件过滤器。此外,如果添加事件筛选器,它还不会使用remvoveEventFilter方法删除它们。它不应该删除它,因为我编码删除事件过滤器,所以它不响应任何键吗?多谢各位

public class Main extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        Plane plane = new Plane();
        Group group = new Group(plane.getPlaneImage(), plane.getMissleZero().getMissleImage(), plane.getMissleOne().getMissleImage(), plane.geMissleTwo().getMissleImage(), plane.getMissleThree().getMissleImage(), plane.getMissleFour().getMissleImage());
        Scene scene = new Scene(group, 700, 700);
        scene.setFill(Color.BLACK);
        scene.addEventFilter(KeyEvent.KEY_PRESSED, plane.getMissleZero().moveMissle());
        scene.removeEventFilter(KeyEvent.KEY_PRESSED, plane.getMissleZero().moveMissle());
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

我无法添加和删除完全相同的eventFilter的主要原因是在需要使用eventFilter时错误地使用了eventHandler。我相信,原始帖子中的评论也与这个问题有关

如何实现
moveMissile()
?它作为公共事件处理程序moveMissile()实现{//使用动画计时器移动导弹的代码}。动画计时器是Missle类中放置代码的字段。方法的签名并不重要。不过,返回的对象类型很重要。我很确定是它造成了这个问题(确切的
句柄
实现并不是很重要;重要的是返回的对象的类型和创建方式)。很抱歉,moveMissle()返回以下内容:return key=(KeyEvent KeyEvent)->{//code with method to start the bullet movement animation timer}.看看这个问题:只要不为
moveMissile
的两个调用返回相同的事件处理程序实例,代码就不会工作。这需要将处理程序存储在字段中。