10

removeEventHandler() is ok, but what if I don't keep reference on handler ?

Can I remove any event handler(filter) by event type or even all handlers from my JavaFX. scene.Node instance? I guess that somewhere a list of handlers existed, and I can traverse it, and remove what I want.

4

2 回答 2

5

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

我认为您不能删除最初没有引用的事件处理程序或过滤器。您可以添加额外的事件过滤器以按类型过滤事件处理,或者您可以在节点上设置自己的事件调度程序,并让您的自定义调度程序仅将您想要的事件转发到节点的标准事件调度程序。

我猜某处存在处理程序列表,我可以遍历它,并删除我想要的。

是的,但这隐藏在Node 的私有实现中,因此您可能不想破解私有 Node 代码来做到这一点。

于 2013-05-21T19:47:33.913 回答
4

我在寻找如何创建删除自己的事件处理程序时遇到了这个问题。我的问题的答案就在这里,不知道对你有没有帮助。 javafx 有一个 eventfilter 删除自己

这是一个例子

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
于 2017-03-26T12:46:01.417 回答