使用filterEvents()时如何删除事件过滤器?
题
你好,我想一起使用 rxscala 和 scalafx 所以我这样做是为了重新打包鼠标事件:
def mouseEvents: Observable[MouseEvent] = Observable.create(observer => {
stage.filterEvent(MouseEvent.Any)((event: MouseEvent) => {
observer.onNext(event)
event.consume
})
Subscription { ??? }
})
问题是在里面 Subscription { ??? }
块我想删除注册的事件过滤器 filterEvent()
但看着它我发现 filterEvent()
不保留对事件过滤器的引用,因此我无法使用 stage.removeEventFilter()
. 。我没有看到 removeFilterEvent()
两者都是等价的,那么如何使用事件过滤器注册 filterEvent()
删除?
我想解决方法是不使用 filterEvent()
而是使用 javafx 的 addEventFilter()
但语法更糟糕。
解决方案
目前您可以使用 addEventFilter(eventType, eventHandler)
和 removeEventFilter(eventType, eventHandler)
.
在最新的 ScalaFX 1.0.0-M8-快照 方法 filterEvent
按预期返回订阅。(看 ScalaFX 第 115 期)
不隶属于 StackOverflow