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

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

我考虑过创建一个带有id字段(例如,带有Enum)和包含数据的Object field的包类,将其命名为ReactFXEventBundle。只有此类的实例才能用作Events,消费者可以通过分析id字段来标识Event的类型。因此,所有Consumer类都将实现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());


换句话说,您将整数流转换为字符串流,合并两个字符串流,然后将合并的流馈送到字段的text属性中。 (feedTo(property)只是subscribe(property::set)的简写)。

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

关于java - ReactFX Consumer收听多个EventStream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27862175/

10-12 02:40