summaryrefslogtreecommitdiff
path: root/docs/examples/swing/LinePainting.scala
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/swing/LinePainting.scala')
-rw-r--r--docs/examples/swing/LinePainting.scala53
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
+ }
+}