/* * File: DrawLines.java * ------------------- * Name: Axel Werner [mail@awerner.myhome-server.de] * Section Leader: * * CS106A - Section 20 - Problem 4 - Draw Lines * * Write a GraphicsProgram that allows the user to * draw lines on the canvas. Pressing the mouse * button sets the starting point for the line. * Dragging the mouse moves the other endpoint * around as the drag proceeds. Releasing the * mouse fixes the line in its current position * and gets ready to start a new line. * * For example, suppose that you press the mouse * button somewhere on the screen and then drag it * rightward an inch, holding the button down. * What you’d like to see is the following picture: * * {picture1} * * If you then move the mouse downward without * releasing the button, the displayed line will * track the mouse, so that you might see the * following picture: * * {picture2} * * Because the original point and the mouse position * appear to be joined by some elastic string, this * technique is called rubber-banding. * Although this program may seem quite powerful, it * is also simple to implement. The entire program * requires fewer than 20 lines of code. * * PERSONAL FEATURE BONUS: * * The temporary Line while in "rubber band mode" is * colored in RED to indicate the mode. When mouse * button is released the Line is drawn in standard * Color BLACK as supposed to. * */ import acm.graphics.*; import acm.program.*; import acm.util.*; import java.applet.*; import java.awt.*; import java.awt.event.*; public class DrawLines extends GraphicsProgram { public void run() { addMouseListeners(); } public void mousePressed (MouseEvent e) { tmpLine.setStartPoint( e.getX(), e.getY() ); tmpLine.setEndPoint( e.getX(), e.getY() ); tmpLine.setColor( Color.RED ); add(tmpLine); } public void mouseDragged(MouseEvent e) { tmpLine.setEndPoint( e.getX(), e.getY() ); } public void mouseReleased(MouseEvent e) { GLine newLine = new GLine( tmpLine.getX(), tmpLine.getY(), e.getX(), e.getY() ); add(newLine); remove(tmpLine); } /* * Define some Instance Variables */ /** * Define a temporary Line to work with */ GLine tmpLine = new GLine(0,0,0,0); }