scala/ScalaBook/chapter-07/pulse_actors.scala

import scala.swing._
import event._
import scala.actors._

class Pulse extends Applet {
  object ui extends UI  {    
    var dotAx          = 15 
    var dotAy          = 15
    var dotBx          = 500 
    var dotBy          = 15
    var T : Actor      = null
    var currentX       = 0
    var currentY       = 15
    var canvas : Panel = null
    var dir            = 1
    var interval       = 10
    var lock           = new AnyRef

    override def init() = {
      canvas = new Panel {
        preferredSize = (dotAx+30,dotBx+30)
        opaque        = false
        override def paintComponent(g: java.awt.Graphics) {
          g.setColor(java.awt.Color.black)
          g.drawLine(dotAx,dotAy,dotBx,dotBy)
          g.setColor(java.awt.Color.yellow)
          g.fillOval(currentX,currentY-7,30,30)
        }
      }
      contents = canvas
    }

    override def start() = 
      if (T == null) 
        T = Actor.actor { 
          while ( T != null ) {
            if (currentX == 0)
              dir = 1
            else if (currentX == dotBx)
              dir = -1 
            canvas.repaint
            currentX += dir * interval 
            Thread.sleep(20) 
          }  
        }
    override def stop() = 
      if (T != null)
        T = null
  } // ui
}