//******************************************************************** // DrawingPanel.java Author: Lewis and Loftus / Peter DePasquale // // Refinement #2 // // Represents the primary drawing area for PaintBox. //******************************************************************** import java.util.Vector; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class DrawingPanel extends JPanel implements MouseListener, MouseMotionListener { public static final int DRAWAREA = 400; private ButtonPanel buttonPanel; private Vector drawnItems; private Shape currentShape; private Point basePoint, currentPoint; private int lastShape; //----------------------------------------------------------------- // Sets up the drawing area. //----------------------------------------------------------------- public DrawingPanel (ButtonPanel buttons) { buttonPanel = buttons; drawnItems = new Vector(); lastShape = ButtonPanel.SELECT; setBackground (Color.white); setMinimumSize (new Dimension(DRAWAREA, DRAWAREA)); setPreferredSize (new Dimension(DRAWAREA, DRAWAREA)); addMouseListener (this); addMouseMotionListener (this); } //----------------------------------------------------------------- // Paints all shapes on the drawing panel. //----------------------------------------------------------------- public void paintComponent (Graphics page) { super.paintComponent (page); if (drawnItems.size() > 0) for (int index = drawnItems.size()-1; index >= 0; index--) ((Shape)drawnItems.elementAt(index)).draw (page); } //----------------------------------------------------------------- // Handles a mouse pressed event by storing a new shape. //----------------------------------------------------------------- public void mousePressed (MouseEvent event) { int currentAction = buttonPanel.getButton(); Color strokeColor = buttonPanel.getStrokeColor(); basePoint = event.getPoint(); switch (currentAction) { case ButtonPanel.SELECT: lastShape = ButtonPanel.SELECT; break; case ButtonPanel.LINE: currentShape = new Line (strokeColor, basePoint, basePoint); lastShape = ButtonPanel.LINE; break; case ButtonPanel.OVAL: currentShape = new Oval (strokeColor, basePoint, 0, 0); lastShape = ButtonPanel.OVAL; break; case ButtonPanel.RECT: currentShape = new Rect (strokeColor, basePoint, 0, 0); lastShape = ButtonPanel.RECT; break; case ButtonPanel.POLY: if (lastShape == ButtonPanel.POLY) ((Poly)currentShape).updateLastPoint(basePoint.x, basePoint.y); else { lastShape = ButtonPanel.POLY; currentShape = new Poly (strokeColor, basePoint.x, basePoint.y); } ((Poly)currentShape).addPoint (basePoint.x, basePoint.y); } drawnItems.add (currentShape); repaint(); } //----------------------------------------------------------------- // Handles a mouse dragged event by rubberbanding the current // shape being drawn. //----------------------------------------------------------------- public void mouseDragged (MouseEvent event) { int currentAction = buttonPanel.getButton(); currentPoint = event.getPoint(); switch (currentAction) { case ButtonPanel.LINE: ((Line)currentShape).setEndPoint (currentPoint); break; case ButtonPanel.OVAL: ((Oval)currentShape).setShape (basePoint, currentPoint); break; case ButtonPanel.RECT: ((Rect)currentShape).setShape (basePoint, currentPoint); break; case ButtonPanel.POLY: ((Poly)currentShape).updateLastPoint(currentPoint.x, currentPoint.y); break; } repaint(); } //----------------------------------------------------------------- // Provide empty implementations for unused events. //----------------------------------------------------------------- public void mouseMoved (MouseEvent event) {} public void mouseReleased (MouseEvent event) {} public void mouseEntered (MouseEvent event) {} public void mouseExited (MouseEvent event) {} public void mouseClicked (MouseEvent event) {} }