我正在开发一个带有大约十个不同数据源(例如统计/错误日志/...)的小程序。每个数据源由单个网络连接更新,并通过观察者机制报告更新。小程序具有显示部分数据的不同视图。每个视图只对数据的某些部分感兴趣,并在必要的 Observables 上将自己注册为观察者。
视图(扩展 JPanel)主要由标准摆动组件(例如 JLabels、JButton、...)组成。视图中组件的某些属性取决于来自底层数据模型的信息。
例子:
StatisticPanel::paintComponent(Graphics g) {
clearStatisticButton.setEnabled(stat.hasEntries());
minValueLabel.setText(stat.getMinValue());
super.paintComponent(g);
}
此逻辑在paintComponent()
StatisticPanel 的方法中实现,并且这些update()
方法只调用 repaint(),因为我不希望在 EDT 之外操作组件。
这是在多线程环境中更新摆动组件的预期方式吗?使用 Runnable 会更好SwingUtitlies.invokeLater()
吗?有没有更好的方法来解决这个问题?