1

我已经定制了一个显示大型复杂图表的 JPanel。根据数据的大小,在paintComponent() 中渲染可能需要几分钟。我正在寻找以下策略:

  • 在不占用事件调度线程的情况下绘制组件。
  • 在 JPanel 中绘制一些东西,让用户知道正在渲染图像。
  • 定期更新另一个容器的标签以显示进度

我对此进行了一些研究,我想知道正确的策略是使用 SwingWorker 创建后台线程并绘制到 BufferedImage。计时器将处理状态更新。类成员变量将保持状态。

我在正确的轨道上吗?

4

2 回答 2

2

您需要考虑使用SwingWorker. 您应该在单独的线程中渲染图表。这SwingWorker将有助于实现这一目标。

要开始使用并发多线程,sun 有一个很棒的教程,应该会很有帮助。

于 2009-06-30T13:03:51.930 回答
1

使用由特殊工作线程更新的背景图像。然后在 JPanel 的 paintComponent() 方法中绘制这个图像。该策略称为双缓冲。你有背景和前景图像。如果单独的线程完成数据的绘制,则将此图像设置为前景,将前景加载为背景。如有必要,使 JPanel 无效并继续在背面图像上绘画。

于 2009-06-30T14:53:15.657 回答