Java ReactFX使用者正在侦听多个EventStream
这个问题可能是针对ReactFX的创建者,但欢迎其他人回答 我现在开始在JavaFX应用程序中使用ReactFX进行数据共享和事件处理。我的问题是,一个类如何订阅收听来自两个(或更多)不同Java ReactFX使用者正在侦听多个EventStream,java,events,javafx,reactive-programming,reactfx,Java,Events,Javafx,Reactive Programming,Reactfx,这个问题可能是针对ReactFX的创建者,但欢迎其他人回答 我现在开始在JavaFX应用程序中使用ReactFX进行数据共享和事件处理。我的问题是,一个类如何订阅收听来自两个(或更多)不同EventStreams的事件。假设在控制器类中,我有一个文本字段,该字段可以用新文本(字符串)更新,因此该类将实现消费者。但是,您可能还希望此文本字段更新为一个来自完全不同来源的新整数(例如),因此它必须实现消费者,但您不能这样做,因为它已经实现了消费者 我考虑创建一个bundle类,其中包含一个id字段(例
EventStreams
的事件。假设在控制器类
中,我有一个文本字段
,该字段可以用新文本(字符串)
更新,因此该类将实现消费者
。但是,您可能还希望此文本字段
更新为一个来自完全不同来源的新整数
(例如),因此它必须实现消费者
,但您不能这样做,因为它已经实现了消费者
我考虑创建一个bundle类,其中包含一个id字段(例如
Enum
)和一个包含数据的Object字段,让我们将其命名为ReactFXEventBundle
。只有此类的实例才能用作事件
,消费者可以通过分析id字段来识别事件的类型。因此,所有消费者类都将实现消费者
。这是正确的方法吗?为了确保我们的观点一致,我假设您的情况是这样的
class Controller {
TextField getTextField();
}
EventStream<String> strings;
EventStream<Integer> integers;
换句话说,将整数流转换为字符串流,合并两个字符串流,并将合并后的流馈送到字段的文本属性中。(feedTo(property)
只是subscribe(property::set)
的缩写)
请注意,您的控制器类不必直接实现Consumer
。消费者实例是从属性::set
方法引用创建的。感谢您的回答,它肯定会让我考虑使用EventStream组合的所有可能性!
EventStreams.merge(
strings,
integers.map(Integer::toString)
).feedTo(controller.getTextField().textProperty());