在IntelliJ的JavaFx中使用java EventFilters时,它似乎只是在添加EventFilters,而不是在场景中删除它们?
例如,我使用javaFx场景,添加一个平面对象,然后添加具有所需导弹图像的组,然后添加场景。现在,当我在移动导弹的场景中添加一个事件过滤器,然后将其删除后,该场景在运行时仍会响应键盘按下moveMissle()事件过滤器。此外,如果添加事件筛选器,它还不会使用remvoveEventFilter方法删除它们。它不应该删除它,因为我编码删除事件过滤器,所以它不响应任何键吗?多谢各位在IntelliJ的JavaFx中使用java EventFilters时,它似乎只是在添加EventFilters,而不是在场景中删除它们?,java,intellij-idea,javafx,Java,Intellij Idea,Javafx,例如,我使用javaFx场景,添加一个平面对象,然后添加具有所需导弹图像的组,然后添加场景。现在,当我在移动导弹的场景中添加一个事件过滤器,然后将其删除后,该场景在运行时仍会响应键盘按下moveMissle()事件过滤器。此外,如果添加事件筛选器,它还不会使用remvoveEventFilter方法删除它们。它不应该删除它,因为我编码删除事件过滤器,所以它不响应任何键吗?多谢各位 public class Main extends Application { @Override
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
的两个调用返回相同的事件处理程序实例,代码就不会工作。这需要将处理程序存储在字段中。