2013-05-21 40 views
6

removeEventHandler() là ok, nhưng nếu tôi không giữ tham chiếu về trình xử lý thì sao?javaFX. Xóa tất cả trình xử lý sự kiện (bộ lọc)

Tôi có thể xóa bất kỳ trình xử lý sự kiện (bộ lọc) nào theo loại sự kiện hay thậm chí tất cả các trình xử lý từ số JavaFX của mình. scene.Node thể hiện? Tôi đoán rằng một nơi nào đó một danh sách xử lý tồn tại, và tôi có thể đi qua nó, và loại bỏ những gì tôi muốn.

Trả lời

2

Tôi có thể xóa bất kỳ trình xử lý sự kiện (bộ lọc) nào theo loại sự kiện hoặc thậm chí tất cả các trình xử lý từ phiên bản javafx.scene.Node của tôi không?

Tôi không nghĩ bạn có thể xóa trình xử lý sự kiện hoặc bộ lọc mà bạn không có tham chiếu ban đầu. Bạn có thể add extra event filters để lọc ra chế biến cho các sự kiện theo loại hoặc bạn có thể set your own event dispatcher on the node và để người điều phối tùy chỉnh của bạn chỉ chuyển tiếp các sự kiện bạn muốn tới người điều phối sự kiện chuẩn của nút.

Tôi đoán rằng một nơi nào đó danh sách các trình xử lý đã tồn tại và tôi có thể duyệt qua và xóa những gì tôi muốn.

Có, nhưng được chôn trong private implementation of the Node, vì vậy có thể bạn không muốn hack mã Node riêng tư để thực hiện điều đó.

2

Tôi đã xem qua câu hỏi này trong khi tìm cách tạo trình xử lý sự kiện tự xóa. Câu trả lời cho câu hỏi của tôi là ở đây, tôi không biết nếu nó sẽ giúp bạn. javafx have an eventfilter remove itself

Dưới đây là một ví dụ

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 
Các vấn đề liên quan