JavaFX - Как подключить бэкэнд и фронтэнд? - PullRequest
1 голос
/ 19 июня 2019

Я разрабатываю простую симуляцию MCU на основе Java для Pic16F84 µC. Этот симулятор разделен на две части:

  • Симуляция µC (память, процессор, ALU и т. Д.)
  • Графический интерфейс пользователя (JavaFX) для отображения содержимого памяти и т. Д.

Как я могу реактивно соединить симулятор с пользовательским интерфейсом? Я хочу разработать симуляцию µC как независимую единицу JavaFX. Это означает, что я не хочу использовать классы связанных свойств JavaFX в качестве полей классов внутри классов симулятора.

Например, допустим, у меня есть следующий класс контроллера, связанный с представлением FXML:

public class SimulatorController implements Initializable {

    @FXML private Label memoryContent;
    private Pic16F84Simulator simulator;

    ...

    public SimulatorController() {

        simulator.getMemory().addPropertyChangeListener(event -> {

            memoryContent.setText((String) event.getValue());
        }
    }
}

Я использую PropertyChangeListener s для обновления реактивной. Конечно, в большинстве случаев логика слушателя не так проста. Таким образом, база кода растет очень быстро.

Есть ли более элегантный способ соединения пользовательского интерфейса JavaFX с пользовательским * 109 * независимым внутренним классом? С независимым, я имею в виду, я мог бы извлечь реализацию симулятора без каких-либо оставшихся зависимостей JavaFX.

1 Ответ

3 голосов
/ 19 июня 2019

Если вы хотите, чтобы ваше приложение было реактивным, рассмотрите возможность использования RxJava в бэкэнде (однако есть и другие реактивные библиотеки, Сравнение реактивных фреймворков Java )

Я предлагаю вам использоватьRxJava (http://reactivex.io/, введение ).Поначалу это довольно сложно, но как только вы ее получите, у вас будет доступ к этой библиотеке на нескольких платформах (ruby, javascript, java и т. Д., http://reactivex.io/languages.html)

Самое важное, что выВам нужно будет узнать об Observable ( generic docs | java docs ). Затем просто реализуйте слушатели, используя RxJava api (наиболее вероятно, что вы захотите использовать метод подписки) аналогично кодуфрагмент, который вы отправили.

Некоторые блоги для чтения:

...