1

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

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

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

4

1 回答 1

1

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

class Controller {
    TextField getTextField();
}

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

并且您想同时路由stringsintegersTextField 的textProperty(). 这就是你这样做的方式:

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

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

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

于 2015-01-09T19:02:33.657 回答