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