加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JavaFX中Event consume的含义是什么?

发布时间:2020-12-14 05:47:52 所属栏目:Java 来源:网络整理
导读:我试图理解 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
我试图理解 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()调用,看看会发生什么……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读