Периодическая перекраска 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 ничего не делает. Так как вы периодически перекрашиваете все это?

2 ответа

Я понимаю, что это датировано, но я извлек вашу 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()
}

Рассмотреть вопрос о звонке peer на top (увидеть MainFrame), а затем позвонив repaint на что:

top.peer.repaint()

Также не забудьте позвонить top.pack(),

Другие вопросы по тегам