【问题标题】:notified when Swing finished drawingSwing 完成绘图时通知
【发布时间】:2012-01-05 21:43:32
【问题描述】:

Swing 小程序完成绘制后收到通知的正确方法是什么?我正在编写一些计时代码来测量小程序需要多长时间,并希望包括显示任何图形的时间。

在执行所有绘图的 init() 方法结束时,我将 Runnable 传递给 SwingUtilities.invokeLater,它会休眠 10 秒。我在显示图形之前看到了延迟。我原以为延迟会发生在图形之后,因为我知道它会在绘图调用之后排队。我尝试将此睡眠测试代码移至 start() 并得到相同的结果。

根据我对 javascript 警报消息的测试,似乎在绘制图形之前也触发了放置在 HTML body 标记上的 onload 事件。

【问题讨论】:

  • 我将 Runnable 传递给 SwingUtilities.invokeLater,它会休眠 10 秒 - invokeLater() 方法用于将代码添加到 EDT 以执行。如果您使 EDT 休眠,则 Swing 无法重新绘制自身。
  • 你的问题到底是什么?

标签: java javascript swing applet


【解决方案1】:

通常,init() 方法初始化小程序的组件/布局。实际绘图由paint()完成。

您可以通过调用super.paint(..) 并添加您自己的代码来覆盖paint() 方法:

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

您注意到的延迟是因为您传递给SwingUtilities.invokeLater()Runnableinit()paint() 之间的某个位置被调用

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
相关资源
最近更新 更多