2009-06-30 74 views
1

我已經定製了一個顯示大型複雜圖形的JPanel。根據數據的大小,可能需要幾分鐘才能在paintComponent()中進行渲染。我正在尋找一種策略來:PaintComponent需要很長時間才能鎖定Swing事件調度線程

  • 繪製組件,而不佔用事件調度線程。
  • 在JPanel中繪製一些東西讓用戶知道圖像正在渲染。
  • 定期更新另一個容器的標籤,以顯示

我研究這個有點進步,我想知道,如果正確的策略是使用的SwingWorker創建一個後臺線程,並繪製到一個BufferedImage 。計時器將處理狀態更新。類成員變量將保持狀態。

我在正確的軌道上嗎?

回答

2

你需要看看使用SwingWorker。你應該在單獨的線程中完成圖表的渲染。 SwingWorker將有助於實現這一點。

要開始使用併發的多線程,sun有一個great tutorial,這應該證明非常有用。

1

使用由特殊工作線程更新的背景圖像。然後在JPanel的paintComponent()方法中繪製這個圖像。該策略被稱爲雙緩衝。你有背景和前景圖像。如果單獨的線程完成數據的繪製,則將此圖像設置爲前景和前景加載作爲背景。使JPanel無效並在必要時繼續在後面的圖像上繪畫。

相關問題