ReactFX Consumer监听多个EventStream

时间:2015-01-09 13:57:42

标签: java events javafx reactive-programming reactfx

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

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

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

1 个答案:

答案 0 :(得分:1)

为了确保我们在同一页面,我认为您的情况看起来像这样

class Controller {
    TextField getTextField();
}

EventStream<String> strings;
EventStream<Integer> integers;

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

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

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

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