scala/ScalaBook/chapter-07/pulse.scala

import scala.swing._
import event._

class Pulse extends Applet {
  object ui extends UI  with Runnable {    
    var dotAx          = 15 
    var dotAy          = 15
    var dotBx          = 500 
    var dotBy          = 15
    var T : Thread     = 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 = new Thread(this)
        T.start()
      } 

    override def stop() = 
      if (T != null)
        T = null

    override def run(): Unit = {
        while ( T != null ) {
          if (currentX == 0)
            dir = 1
          else if (currentX == dotBx)
            dir = -1 
          canvas.repaint
          currentX += dir * interval 
          try {
            Thread.sleep(10) 
          } catch {
             case ex : InterruptedException => return
          } // catch
        } // while 
      } // run
  } // ui
}