gpt4 book ai didi

JavaFX : what is the difference between EventHandler and EventFilter?

转载 作者:IT老高 更新时间:2023-10-28 21:02:01 25 4
gpt4 key购买 nike

我已经用谷歌搜索了一段时间,我发现基本上,一些网页说没有大的差异。除了一些点:

  1. EventFilterEventHandler
  2. 之前执行
  3. EventFilterevent.Consume(); 不敏感让我看看我是否理解它:假设我有:

    按钮 b= new Button("Test");
    b.addEventHandler(.....){...};
    b.addEventFilter(......){...};

假设它们都“链接”到 MouseEvent.MOUSE_CLICKED;那么,EventFilter的代码会最先被执行!?

假设,现在,我有:

Button b= new Button("Test");
b.addEventHandler(.....);
b.addEventFilter(......){
//some code
event.consume();
}; // First filter
b.addEventFilter(......){
//some other code
event.consume();
}; // Second filter

在这种情况下,船 EventFilter 将被执行,但 EventHandler 不会。对吧?

还有什么要知道的吗?在某些情况下我应该选择其中一种吗?为了解决一些问题,我有时应该一起使用它们吗?

谢谢!

最佳答案

每当事件发生时,它都会遵循一个流程来确定场景图中的哪个节点应该处理该事件。该过程采取以下步骤:

  • 目标选择
  • 路线 build
  • 事件捕获<- 在此处触发过滤器
  • 事件冒泡<- 此处触发处理程序

目标选择假设您的场景包含一个带圆圈的窗​​格。如果您点击圆圈,圆圈将成为事件目标。

路由构造 接下来,JavaFX 创建一个路由(或事件调度链)。在我们的示例中,链看起来像 stage -> scene -> pane -> circle

事件捕获 事件通过链上的每个事件过滤器进行。只要其中一个过滤器调用 consume(),链就会停止并且该节点成为目标。如果没有过滤器调用 consume(),则链的末端(圆圈)仍然是目标。

事件冒泡 接下来,事件再次通过链推送,但这次是从事件目标到舞台。因此,如果 Pane 事件过滤器调用 consume(),将命中以下事件处理程序:pane -> scene -> stage

因此不同之处不仅在于这些处理程序何时被激活,而且事件过滤器可以阻止子节点接收事件。

关于JavaFX : what is the difference between EventHandler and EventFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com