1

この質問はおそらくReactFXの作成者を対象としていますが、他の人も大歓迎です。

現在、 JavaFXアプリケーション内でのデータ共有とイベント処理にReactFXを使用し始めています。私の質問は、クラスが 2 つ (またはそれ以上) の異なるイベントをリッスンするようにサブスクライブする方法です。に で更新される可能性のあるがあると仮定すると、このクラスは を実装します。しかし、これを(たとえば)まったく異なるソースからので更新することもできます。そのため、を実装する必要があります。EventStreamsController classtextfieldnew text(String)Consumer<String>textfieldnew IntegerConsumer<Integer>Consumer<String>

Enumid フィールド (たとえば、) とデータを含むバンドル クラスを作成することを考えました。Object field名前を付けましょうReactFXEventBundle。として使用できるのは、このクラスのインスタンスのみです。Eventsコンシューマーは、id フィールドを分析してイベントのタイプを識別できます。したがって、すべての Consumer クラスは を実装しConsumer<ReactFXEventBundle>ます。これは正しいアプローチでしょうか?

4

1 に答える 1

1

私たちが同じページにいることを確認するために、あなたの状況は次のようになっていると思います

class Controller {
    TextField getTextField();
}

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

と の両方を TextField の にルーティングstringsintegersますtextProperty()。これを行う方法は次のとおりです。

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

つまり、整数のストリームを文字列のストリームに変換し、2 つの文字列ストリームをマージして、マージされたストリームをフィールドの text プロパティにフィードします。(feedTo(property)は単に省略形ですsubscribe(property::set))。

Consumerコントローラー クラスを直接実装する必要はないことに注意してください。コンシューマー インスタンスは、property::setメソッド参照から作成されます。

于 2015-01-09T19:02:33.657 に答える