ReactFX Consumer прослушивает более одного EventStream
Этот вопрос, возможно, предназначен для создателя ReactFX, но другие могут ответить.
В настоящее время я начинаю использовать ReactFX для обмена данными и обработки событий в приложении JavaFX. Мой вопрос заключается в том, как класс может подписаться на прослушивание событий от двух (или более) разных EventStreams
, Предположим, что в Controller class
у меня есть textfield
который может быть обновлен с new text(String)
так что этот класс будет реализовывать Consumer<String>
, Но тогда вы можете также хотеть для этого textfield
быть обновленным с new Integer
(например) из совершенно другого источника, поэтому он должен был бы реализовать Consumer<Integer>
, только вы не можете сделать это, потому что это уже реализует Consumer<String>
,
Я думал о создании класса связки с полем id (с Enum
например) и Object field
содержащий данные, давайте назовем их ReactFXEventBundle
, Только экземпляры этого класса смогут использоваться как Events
где потребитель может определить тип события, проанализировав поле id. Следовательно, все классы потребителей будут реализовывать Consumer<ReactFXEventBundle>
, Будет ли это правильный подход?
1 ответ
Чтобы убедиться, что мы находимся на одной странице, я предполагаю, что ваша ситуация выглядит примерно так
class Controller {
TextField getTextField();
}
EventStream<String> strings;
EventStream<Integer> integers;
и вы хотите направить оба strings
а также integers
в TextField's textProperty()
, Вот как вы это делаете:
EventStreams.merge(
strings,
integers.map(Integer::toString)
).feedTo(controller.getTextField().textProperty());
Словом, вы преобразуете поток целых чисел в поток строк, объединяете два потока строк и подаете объединенный поток в свойство text поля. (feedTo(property)
это просто сокращение для subscribe(property::set)
).
Обратите внимание, что ваш класс контроллера не должен реализовывать Consumer
непосредственно. Экземпляр потребителя создается из property::set
ссылка на метод.