我已经谷歌搜索了一段时间,我发现基本上,一些网页说没有大的差异.除了一些要点:
EventFilter 之前执行 EventHandlerEventFilterevent.Consume();
让我看看是不明智的如果我理解它:让我说我有:
Button 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,EventFilter将执行boath s但EventHandler不会执行.对?
还有其他事要知道吗?在哪些情况下我应该优先考虑其中一个?我有时应该一起使用它们来解决一些问题吗?
谢谢!
sir*_*009 14
每当事件发生时,它遵循一个过程来确定场景图中的哪个节点应该处理该事件.该过程采取以下步骤:
目标选择假设您的场景包含带圆圈的窗格.如果单击圆圈,圆圈将成为事件目标.
路径构建接下来,JavaFX创建路由(或事件分派链).在我们的例子中,链条看起来像stage -> scene -> pane -> circle
事件捕获事件通过链上的每个事件过滤器传递.只要其中一个过滤器调用consume(),链就会停止并且该节点成为目标.如果没有过滤器调用consume()链的末端(圆圈)仍然是目标.
事件冒泡接下来,事件再次被推送到链中,但这次是从事件目标到阶段.因此,如果调用窗格事件过滤器consume(),将触发以下事件处理程序:pane -> scene -> stage
因此,区别不仅在于这些处理程序被激活,而且事件过滤器还可以阻止子节点接收事件.
我不完全理解你的问题,但我在 oracle 文档中找到了这个:
过滤器和处理程序之间的主要区别在于每个过滤器的执行时间。
https://docs.oracle.com/javafx/2/events/processing.htm
| 归档时间: |
|
| 查看次数: |
10394 次 |
| 最近记录: |