2012-01-05 62 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

相关问题