2013-05-21 110 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