diff options
Diffstat (limited to 'docs/examples/swing/LinePainting.scala')
-rw-r--r-- | docs/examples/swing/LinePainting.scala | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/docs/examples/swing/LinePainting.scala b/docs/examples/swing/LinePainting.scala new file mode 100644 index 0000000000..f72f8701ed --- /dev/null +++ b/docs/examples/swing/LinePainting.scala @@ -0,0 +1,53 @@ +package examples.swing + +import scala.swing.Swing._ +import scala.swing.{MainFrame, Panel} +import scala.swing.event._ +import java.awt.{Color, Graphics2D, Point, geom} + +/** + * Dragging the mouse draws a simple graph + * + * @author Frank Teubler, Ingo Maier + */ +object LinePainting extends SimpleSwingApplication { + lazy val ui = new Panel { + background = Color.white + preferredSize = (200,200) + + focusable = true + listenTo(mouse.clicks, mouse.moves, keys) + + reactions += { + case e: MousePressed => + moveTo(e.point) + requestFocusInWindow() + case e: MouseDragged => lineTo(e.point) + case e: MouseReleased => lineTo(e.point) + case KeyTyped(_,'c',_,_) => + path = new geom.GeneralPath + repaint() + case _: FocusLost => repaint() + } + + /* records the dragging */ + var path = new geom.GeneralPath + + def lineTo(p: Point) { path.lineTo(p.x, p.y); repaint() } + def moveTo(p: Point) { path.moveTo(p.x, p.y); repaint() } + + override def paintComponent(g: Graphics2D) = { + super.paintComponent(g) + g.setColor(new Color(100,100,100)) + g.drawString("Press left mouse button and drag to paint." + + (if(hasFocus) " Press 'c' to clear." else ""), 10, size.height-10) + g.setColor(Color.black) + g.draw(path) + } + } + + def top = new MainFrame { + title = "Simple Line Painting Demo" + contents = ui + } +} |