import java.awt.*; public class PaintShape { private boolean filledShape; private Color paintColor; private int shape; private int startX; private int startY; private int stopX; private int stopY; private Rectangle rect; public PaintShape(boolean filled, Color c, int sh, int x, int y) { filledShape = filled; paintColor = c; shape = sh; startX = x; startY = y; } public void setStop(int x, int y) { stopX = x; stopY = y; int xS, wid, yS, hig; // speedy declarations if (startX < stopX) { xS = startX; wid = stopX - startX; } else { xS = stopX; // avoid negative width wid = startX - stopX; } if (startY < stopY) { yS = startY; hig = stopY - startY; } else { yS = stopY; // avoid negative height hig = startY - stopY; } /* make the rect bigger than shape itself */ rect = new Rectangle(xS-1, yS-1, wid+2, hig+2); } public boolean contains(Point xy) { return rect.contains(xy); } public void paintComponent(Graphics g) { Color oldColor = g.getColor(); g.setColor(paintColor); if (shape == PaintPanel.LINE) { // that is line g.drawLine(startX, startY, stopX, stopY); } else { /* make four temp variables to avoid trouble */ int startXX = startX; int startYY = startY; int width = stopX - startX; int height = stopY - startY; if (width < 0) { // not good startXX = stopX; width = -width; } else { startXX = startX; } if (height < 0) { // not good startYY = stopY; height = -height; } else { startYY = startY; } if (shape == PaintPanel.RECTANGLE) { // that is rectangle if (filledShape) { g.fillRect(startXX, startYY, width, height); } else { g.drawRect(startXX, startYY, width, height); } } else { // remaining is oval if (filledShape) { g.fillOval(startXX, startYY, width, height); } else { g.drawOval(startXX, startYY, width, height); } } } g.setColor(oldColor); } }