ReactFX Consumer 监听多个 EventStream
ReactFX Consumer listening to more than one EventStream
这个问题可能是针对ReactFX的创建者的,但欢迎其他人回答。
我目前开始使用 ReactFX 在 JavaFX 应用程序中进行数据共享和事件处理。我的问题是 class 如何订阅以监听来自两个(或更多)不同 EventStreams
的事件。假设在 Controller class
中我有一个 textfield
可以用 new text(String)
更新,所以这个 class 将实现 Consumer<String>
。但是您可能还希望使用来自完全不同来源的 new Integer
(例如)更新此 textfield
,因此它必须实施 Consumer<Integer>
,只有您可以'不要那样做,因为它已经实现了 Consumer<String>
.
我想创建一个包 class,其中包含一个 id 字段(例如带有一个 Enum
)和一个包含数据的 Object field
,让我们将其命名为 ReactFXEventBundle
.只有此 class 的实例才能用作 Events
,其中消费者可以通过分析 id 字段来识别事件的类型。因此,所有 Consumer classes 都将实现 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());
换句话说,您将整数流转换为字符串流,合并两个字符串流,然后将合并后的流输入属性场地。 (feedTo(property)
只是 subscribe(property::set)
的 shorthand。
请注意,您的控制器 class 不必直接实施 Consumer
。消费者实例是根据 property::set
方法引用创建的。
这个问题可能是针对ReactFX的创建者的,但欢迎其他人回答。
我目前开始使用 ReactFX 在 JavaFX 应用程序中进行数据共享和事件处理。我的问题是 class 如何订阅以监听来自两个(或更多)不同 EventStreams
的事件。假设在 Controller class
中我有一个 textfield
可以用 new text(String)
更新,所以这个 class 将实现 Consumer<String>
。但是您可能还希望使用来自完全不同来源的 new Integer
(例如)更新此 textfield
,因此它必须实施 Consumer<Integer>
,只有您可以'不要那样做,因为它已经实现了 Consumer<String>
.
我想创建一个包 class,其中包含一个 id 字段(例如带有一个 Enum
)和一个包含数据的 Object field
,让我们将其命名为 ReactFXEventBundle
.只有此 class 的实例才能用作 Events
,其中消费者可以通过分析 id 字段来识别事件的类型。因此,所有 Consumer classes 都将实现 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());
换句话说,您将整数流转换为字符串流,合并两个字符串流,然后将合并后的流输入属性场地。 (feedTo(property)
只是 subscribe(property::set)
的 shorthand。
请注意,您的控制器 class 不必直接实施 Consumer
。消费者实例是根据 property::set
方法引用创建的。