2013-05-21 140 views
6

removeEventHandler()是好的,但如果我不保持处理程序的参考?javaFX。删除所有事件处理程序(过滤器)

我可以通过事件类型或我的JavaFX中的所有处理程序删除任何事件处理程序(筛选器)。 scene.Node实例?我想在某个地方存在一个处理程序列表,我可以遍历它,并删除我想要的东西。

回答

2

我可以通过事件类型或甚至所有处理程序从我的javafx.scene.Node实例中删除任何事件处理程序(筛选器)吗?

我不认为你可以删除你最初没有参考的事件处理程序或过滤器。您可以通过add extra event filters来过滤按类型处理事件,或者您可以set your own event dispatcher on the node并让您的自定义调度程序仅将节点的标准事件调度程序的事件转发给您。

我想在某个地方有一个处理程序列表存在,我可以遍历它,并删除我想要的东西。

是的,但是这是埋在private implementation of the Node,所以你可能不想破解私人节点代码来做到这一点。

2

我在查找如何创建移除自己的事件处理程序时遇到此问题。我的问题的答案在这里,我不知道它是否会帮助你。 javafx have an eventfilter remove itself

下面是一个例子

EventHandler<MouseEvent> object_clicked=new EventHandler<MouseEvent>() { 
    @Override 
    public void handle(MouseEvent event) { 
     // on click actions here 

     my_node.removeEventFilter(MouseEvent.MOUSE_CLICKED, this); // at the bottom 
    } 
}; 

my_node.addEventFilter(MouseEvent.MOUSE_CLICKED, object_clicked); // add the eventhandler to the node