我想知道Display类中的addFilter和addListener方法在概念上有什么区别?

最佳答案

我假设您是指org.eclipse.swt.widgets.Display,如果是这样的话:

在正常情况下,addFilteraddListener都将被通知相同的事件,但是addFilter将被更早调用。

它们的不同之处在于,添加了addFilter的侦听器可以取消将事件调度到添加到addListener的侦听器的方式,这是通过将event.type设置为SWT.None来实现的:

addFilterjavadocs中:


  在handleEvent()中将事件的类型设置为SWT.None
  方法可用于更改事件类型并停止后续的Java
  监听器无法运行。因为事件过滤器先于其他运行
  侦听器,事件过滤器可以阻止其他侦听器并设置
  事件中的任意字段。因此,事件过滤器是
  既强大又危险。通常应避免使用它们
  性能,调试和代码维护原因。


请注意有关事件过滤器的最后一部分“ [...]既强大又危险。通常应避免使用它们。”

关于java - addFilter和addListener之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33539511/

10-09 01:30