我已经定制了一个显示大型复杂图表的 JPanel。根据数据的大小,在paintComponent() 中渲染可能需要几分钟。我正在寻找以下策略:
- 在不占用事件调度线程的情况下绘制组件。
- 在 JPanel 中绘制一些东西,让用户知道正在渲染图像。
- 定期更新另一个容器的标签以显示进度
我对此进行了一些研究,我想知道正确的策略是使用 SwingWorker 创建后台线程并绘制到 BufferedImage。计时器将处理状态更新。类成员变量将保持状态。
我在正确的轨道上吗?
我已经定制了一个显示大型复杂图表的 JPanel。根据数据的大小,在paintComponent() 中渲染可能需要几分钟。我正在寻找以下策略:
我对此进行了一些研究,我想知道正确的策略是使用 SwingWorker 创建后台线程并绘制到 BufferedImage。计时器将处理状态更新。类成员变量将保持状态。
我在正确的轨道上吗?
您需要考虑使用SwingWorker
. 您应该在单独的线程中渲染图表。这SwingWorker
将有助于实现这一目标。
要开始使用并发多线程,sun 有一个很棒的教程,应该会很有帮助。
使用由特殊工作线程更新的背景图像。然后在 JPanel 的 paintComponent() 方法中绘制这个图像。该策略称为双缓冲。你有背景和前景图像。如果单独的线程完成数据的绘制,则将此图像设置为前景,将前景加载为背景。如有必要,使 JPanel 无效并继续在背面图像上绘画。