JavaFX中Event consume的含义是什么?

前端之家收集整理的这篇文章主要介绍了JavaFX中Event consume的含义是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图理解 Event Handling in JavaFX,在那里我发现了这一行.

The route can be modified as event filters and event handlers along
the route process the event. Also,if an event filter or event handler
consumes the event at any point,some nodes on the initial route might
not receive the event.

你能解释一下事件消耗的意义吗?

解决方法

事件沿特定路线传递.在大多数情况下(例如鼠标/键事件)路径将从场景的根节点开始,并包含从根节点到场景图中的目标节点的路径上的每个节点.在到目标节点的路由上,将执行事件过滤器,如果这些过滤器中的任何过滤器都应该使用该事件,则会停止对事件的任何进一步处理.一旦事件到达目标节点,如果“旅行”回到根调用任何事件处理程序.通过使用事件也可以在那里停止事件处理.

例:

@Override
public void start(Stage primaryStage) {
    Rectangle rect = new Rectangle(50,50);

    StackPane root = new StackPane(rect);

    rect.addEventFilter(MouseEvent.MOUSE_CLICKED,evt -> {
        System.out.println("rect click(filter)");
//      evt.consume();
    });
    root.addEventFilter(MouseEvent.MOUSE_CLICKED,evt -> {
        System.out.println("root click(filter)");
//        evt.consume();
    });

    root.setOnMouseClicked(evt -> {
        System.out.println("root click(handler)");
//      evt.consume();
    });
    rect.setOnMouseClicked(evt -> {
        System.out.println("rect click(handler)");
//      evt.consume();
    });

    Scene scene = new Scene(root,200,200);

    primaryStage.setScene(scene);
    primaryStage.show();
}

如果单击rect,则事件处理将从根节点开始.这里执行过滤器.如果事件未在过滤器中使用,则会将其传递到rect节点,事件过滤器将在此处接收事件.如果过滤器未使用该事件,则rect的事件处理程序将接收该事件.如果事件未被该事件处理程序消除,则根节点的事件处理程序将接收该事件.

只需取消注释一些evt.consume()调用,看看会发生什么……

猜你在找的Java相关文章