ReactFX 使用者侦听多个 EventStream



这个问题可能是针对ReactFX的创建者的,但欢迎其他人回答。

我目前开始使用 ReactFXJavaFX 应用程序中进行数据共享和事件处理。我的问题是,一个类如何订阅以收听来自两个(或多个)不同EventStreams的事件。假设在一个Controller class中我有一个可以用new text(String)更新的textfield,所以这个类将实现Consumer<String>。但是您可能还希望使用来自完全不同的来源的new Integer(例如)更新此textfield,因此它必须实现Consumer<Integer>,只是您不能这样做,因为它已经实现了Consumer<String>

我想创建一个带有 id 字段(例如带有 Enum)和包含数据的Object field的捆绑类,让我们将其命名为 ReactFXEventBundle .只有此类的实例才能用作Events,其中消费者可以通过分析 id 字段来识别事件的类型。因此,所有消费者类都将实现Consumer<ReactFXEventBundle>。这是正确的方法吗?

为了确保我们在同一页面上,我假设您的情况如下所示

class Controller {
    TextField getTextField();
}
EventStream<String> strings;
EventStream<Integer> integers;

并且您希望将stringsintegers路由到 TextField 的textProperty()。这是你如何做到这一点的:

EventStreams.merge(
    strings,
    integers.map(Integer::toString)
).feedTo(controller.getTextField().textProperty());

简而言之,您将整数流转换为字符串流,合并两个字符串流并将合并的流馈送到字段的文本属性中。(feedTo(property)只是subscribe(property::set)的简写)。

请注意,控制器类不必直接实现Consumer。使用者实例是从property::set方法引用创建的。

相关内容

  • 没有找到相关文章

最新更新