定期重绘scala.swing.SimpleSwingApplication

时间:2013-04-07 13:13:09

标签: scala scala-swing

如果我运行此示例代码

class ExampleGUIElement extends Panel
{
  preferredSize = new Dimension(100, 100)
  val rand : Random = Random
  override def paintComponent(g: Graphics2D) = g.drawLine(rand.nextInt(10),rand.nextInt(10),rand.nextInt(90) + 10 ,rand.nextInt(90) + 10)
}

object GUITest extends SimpleSwingApplication  
{
  def top = new MainFrame
  {
    contents = new ExampleGUIElement
  }
}

它显然只显示最初绘制的一条线。如果我想要定期重新绘制,我通常会在最外面的JFrame上创建一个调用重绘的Timer。 但是SimpleSwingApplication没有这个方法,至少我找不到它,而调用top.repaint却没有做任何事情。那么你如何定期重绘整个事物呢?

2 个答案:

答案 0 :(得分:1)

考虑在peer上调用top(请参阅MainFrame),然后在其上调用repaint

top.peer.repaint()

此外,请不要忘记致电top.pack()

答案 1 :(得分:1)

我意识到这已经过时了,但我将你的Panel提取到一个val并添加了一个计时器来重新绘制它:

def top = new MainFrame
{
    val example = new ExampleGUIElement 
    contents = example
    val timer=new javax.swing.Timer(250, Swing.ActionListener(e =>
    { 
        example.repaint()
    }))
    timer.start()
}