这个问题也许是针对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;
并且您要将
strings
和integers
都路由到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/