2012-01-05 57 views
0

Swing小程序完成繪圖後要通知的正確方法是什麼?我正在編寫一些計時代碼來測量小程序花費多長時間並希望包含顯示任何圖形的時間。當Swing完成繪圖時通知

在執行所有繪圖的init()方法結束時,我將一個Runnable傳遞給了睡眠10秒的SwingUtilities.invokeLater。我看到顯示圖形之前的延遲。我會認爲延遲會發生在圖形之後,因爲我知道它會在繪圖調用後排隊。我試着將這個睡眠測試代碼移動到start()並得到相同的結果。

基於我對javascript警報消息的測試,似乎在繪製圖形之前觸發了放置在HTML body標籤上的onload事件。

+1

*我將一個Runnable傳遞給睡眠時間爲10秒的SwingUtilities.invokeLater * - invokeLater()方法用於向EDT中添加代碼以執行。如果你讓EDT睡覺,那麼Swing不能重新繪製自己。 – camickr 2012-01-06 01:43:49

+0

你的問題到底是什麼? – 2012-01-06 02:15:08

回答

4

通常,init()方法初始化小程序的組件/佈局。實際繪圖由paint()完成。

你可以通過調用super.paint(..)並添加自己的代碼,它覆蓋paint()方法:

public void paint(Graphics g) { 
    super.paint(g); 
    // Add your code 
} 

您注意到的延遲是因爲你傳遞給SwingUtilities.invokeLater()Runnableinit()paint()

之間的某處調用
+0

我的jApplet contentPane有一個jComponent。我覆蓋了jComponent的paintComponent方法,確實看到了繪製圖形後的延遲。謝謝你的幫助。 – rimsky 2012-01-06 17:28:41

+0

啊,是的,沒錯。一些上下文信息:http://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html – 2012-01-06 17:32:59