java - JavaFX中Event consumes的含义是什么

标签 java events javafx

我试图理解 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.

你能解释一下event consumes是什么意思吗?

最佳答案

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

例子:

@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,事件处理将从root Node 开始。这里过滤器被执行。如果事件未在过滤器中使用,则将其传递到 rect Node,事件过滤器在此处接收事件。如果过滤器未使用该事件,则 rect 的事件处理程序将接收该事件。如果该事件未被该事件处理程序使用,则 root Node 的事件处理程序将接收该事件。

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

关于java - JavaFX中Event consumes的含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37813358/

相关文章:

java - 服务器上接收到的 GET 参数没有引号

c - 读取 C 中的按键;前任。 : Arrow keys, 回车键

java - 更改 TableCell 中的背景颜色会删除选择颜色,使其难以阅读

java - Websphere 负载均衡器驻留在网络服务器中?

java - 在 Dremio 中通过 REST 调用添加数据源

java - 如何使用java获取特定线程的CPU内存消耗?

java - 在 Java 中是否有折叠多个事件的标准技术和/或示例?

javascript - ionic 5 : Issues in changing Events to Observable

JavaFX对话框删除标题装饰

java - 自动调整 Canvas 大小以填充封闭的父级