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都不会再接收到此事件

猜你喜欢

转载自blog.csdn.net/weixin_40861847/article/details/84202386