JavaFX学习笔记——重要理念的建立与辨析(九)

事件向下派发再向上冒泡

 

默认条件下,一个事件触发后自stage向最底层的Node逐渐派发,再从最底层冒泡回到stage。

中间的对象使用addEventFilter进行派发过程中事件的监听,使用addEventHandler进行冒泡过程中的事件监听

 

因此倘若有如下代码


     Circle circle = new Circle(100,100,50);

        Pane pane = new Pane();

        ObservableList<Node> list = pane.getChildren();

        list.add(circle);

         //为circle注册鼠标单击的EventHandler
        
        circle.setOnMouseClicked(e->{
         System.out.println("点击了circle");
        });


        //为pane注册鼠标单击的EventHandler  
        pane.setOnMouseClicked(e->{
         System.out.println("点击了pane");
        });


运行结果如下:

 

我们单击这个圆,事件的传递顺序及触发时间如下图所示

因此输出结果和顺序如下

 

由此我们看出JavaFX的事件传递机制——先向下派发事件(由filter监听处理),再向上冒泡事件(由handler处理)

 

停止事件继续传递的方法:consume

如果在某个EventFilter中使用consume则消耗掉此事件,则事件不会再向下派发,即它的所有子节点EventFilter以及所有节点的EventHandler都不会再接收到此事件

如果在某个EventHandler中使用consume则消耗掉此事件,则事件不会再向上冒泡,即它上面的所有父(或祖宗)节点的EventHandler都不会再接收到此事件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值