java - JavaFX - 如何连接后端和前端?
问题描述
我正在为 Pic16F84 µC 开发一个简单的基于 Java 的 MCU 模拟。这个模拟器分为两部分:
- µC 模拟(内存、CPU、ALU 等)
- 用于显示内存内容等的图形用户界面 (JavaFX)。
如何以反应方式将模拟器与 UI 连接起来?我想将 µ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 UI 与 UI独立的后端类连接起来? 独立我的意思是我可以提取模拟器实现而没有任何剩余的 JavaFX 依赖项。
解决方案
如果您希望您的应用程序是响应式的,请考虑在后端使用 RxJava(但是,还有其他响应式库,Java 响应式框架的比较)
我建议你使用 RxJava(http://reactivex.io/,介绍)。一开始是相当困难的,但是一旦你得到它,你就可以在很多平台上访问这个库(ruby、javascript、java等,http://reactivex.io/languages.html)
您必须了解的最重要的事情是 Observable(通用文档| java 文档)。然后只需使用 RxJava api 实现侦听器(很可能您会想要使用 subscribe 方法),类似于您发送的代码片段。
一些博客阅读:
推荐阅读
- javascript - React - 包装父组件和直接子组件
- swift - 'Publishers.Once' 的替代方案是什么?
- android - Android房间架构关系
- jquery - 播放通知声音时未捕获(承诺)DOMException
- javascript - 是否可以像普通函数一样组合生成器函数
- java - 如何通过蓝牙将 Android 应用程序连接到 ESP32?
- google-apps-script - 如何获取项目中所有功能的列表?
- php - 使用 db_query 时打开和关闭连接
- java - 关于运行时常量池或堆中String的一些问题?
- node.js - Angular7:拦截器没有被击中的问题,无法弄清楚