Периодическая перекраска 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()
,