你好,我想一起使用 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 期)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top