小编tfk*_*tfk的帖子

在多线程环境中重新绘制

我正在开发一个包含大约十个不同数据源的applet(例如statistics/error-log/...).每个数据源由单个网络连接更新,并通过观察器机制报告更新.applet具有不同的视图,可以显示部分数据.每个视图只对数据的某些部分感兴趣,并在必要的Observables中将其自身注册为Observer.

视图(扩展的JPanels)主要由标准的摆动组件组成(例如JLabel,JButton,......).视图中组件的某些属性取决于基础数据模型中的信息.

例:

StatisticPanel::paintComponent(Graphics g) {
  clearStatisticButton.setEnabled(stat.hasEntries());
  minValueLabel.setText(stat.getMinValue());
  super.paintComponent(g);
}
Run Code Online (Sandbox Code Playgroud)

这个逻辑paintComponent()在StatisticPanel 的方法中实现,update()方法只调用repaint(),因为我不想操纵EDT之外的组件.

这是在多线程环境中更新swing组件的预期方法吗?使用Runnable更好SwingUtitlies.invokeLater()吗?这个问题有更好的方法吗?

java applet swing multithreading event-dispatch-thread

3
推荐指数
1
解决办法
314
查看次数