2013-04-07 40 views
2

的定期重繪如果我運行此示例代碼scala.swing.SimpleSwingApplication

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 
    } 
} 

顯然,它只能顯示一行已初步平局。如果我想要定期重繪,我通常只會調用一個Timer,調用最外層的JFrame上的重繪。 但是SimpleSwingApplication沒有這個方法,至少我找不到它,而是調用top.repaint而不做任何事情。那麼你怎麼定期重畫整件事?

回答

1

審議關於該top(見MainFrame),然後調用repaint調用peer

top.peer.repaint() 

另外,不要忘記調用top.pack()

+0

這不工作對我來說無論是。我用override def run = GUITest.top.peer.repaint()做了一個計時器,它仍然不更新。 – Nozdrum 2013-04-07 14:33:17

1

我意識到這是過時了,但我提取您的面板爲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() 
}