【发布时间】:2015-11-05 16:25:56
【问题描述】:
我想知道Display类中addFilter和addListener方法在概念上有什么区别?
【问题讨论】:
我想知道Display类中addFilter和addListener方法在概念上有什么区别?
【问题讨论】:
我假设你指的是org.eclipse.swt.widgets.Display,如果是这样的话:
在正常情况下,addFilter 和 addListener 都会收到相同事件的通知,但 addFilter 会更早被调用。
它们的不同之处在于添加addFilter的监听器可以取消将事件分派给添加addListener的监听器,它通过将event.type设置为SWT.None来实现:
来自addFilter的javadocs:
在 handleEvent() 中将事件类型设置为 SWT.None 方法可用于更改事件类型并停止后续 Java 听众从运行。因为事件过滤器在其他过滤器之前运行 侦听器,事件过滤器既可以阻止其他侦听器,也可以设置 事件中的任意字段。因此,事件过滤器是 既强大又危险。通常应避免使用它们 性能、调试和代码维护原因。
注意关于事件过滤器的最后一部分“[...]既强大又危险。通常应该避免使用它们[...]”
【讨论】: