有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ReactFX使用者侦听多个EventStream

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    为了确保我们的观点一致,我假设你的情况是这样的

    class Controller {
        TextField getTextField();
    }
    
    EventStream<String> strings;
    EventStream<Integer> integers;
    

    您希望将stringsintegers路由到TextField的textProperty()。这就是你如何做到的:

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

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

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