Shape Drawer



Instructions:  1. Select a shape.  2. Select a color.  3. Click on the panel and drag the mouse to draw.
 

 

Complete Source Code

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class ShapeDrawer {


   public static class ShapeDrawerPanel extends JPanel {

      Color[] color = {Color.BLACK, Color.WHITE, Color.BLUE, Color.RED, Color.GREEN,
      Color.YELLOW, Color.MAGENTA, Color.CYAN, Color.ORANGE, Color.PINK};

      int[] shapeRecord = new int[20];
      int[] wRecord = new int[20];
      int[] hRecord = new int[20];
      int[] colorRecord = new int[20];
      int[] xRecord = new int[20];
      int[] yRecord = new int[20];

      int currentArrayItem = 0;
      boolean maxReached = false;
      boolean drawingMode = false;

      public void toolPanel(Graphics g) {

         g.setColor(new Color(200,200,255));
         g.fillRect(0,400,500,100);

      }

      public void shapeTools(Graphics g) {

         g.setColor(new Color(0,100,200));
         g.drawRect(20,410,35,20);
         g.setColor(new Color(150,0,0));
         if (shapeRecord[currentArrayItem] == 1) g.drawRect(19,409,37,22);

         g.setColor(new Color(0,100,200));
         g.fillRect(65,410,36,21);
         g.setColor(new Color(150,0,0));
         if (shapeRecord[currentArrayItem] == 2) g.drawRect(64,409,37,22);

         g.setColor(new Color(0,100,200));
         g.fillOval(20,435,35,21);
         g.setColor(new Color(150,0,0));
         if (shapeRecord[currentArrayItem] == 3) g.drawRect(19,434,37,22);

         g.setColor(new Color(0,100,200));
         g.drawOval(65,435,35,20);
         g.setColor(new Color(150,0,0));
         if (shapeRecord[currentArrayItem] == 4) g.drawRect(64,434,37,22);

         g.setColor(new Color(0,100,200));
         g.setFont(new Font("Courier", Font.BOLD, 25));
         g.drawString("DILIP", 25, 480);
         g.setColor(new Color(150,0,0));
         if (shapeRecord[currentArrayItem] == 5) g.drawRect(19,462,82,21);

      }

      public void colorTools(Graphics g) {

         for (int j = 0; j <= 4; j++) {

            g.setColor(color[j]);
            g.fillRect(360+25*j,410,20,20);
            g.setColor(Color.DARK_GRAY);
            g.drawRect(360+25*j,410,20,20);
            g.setColor(new Color(150,0,0));
            if (colorRecord[currentArrayItem] == j + 1) g.drawRect(359+25*j,409,22,22);

         }

         for (int j = 5; j <= 9; j++) {

            g.setColor(color[j]);
            g.fillRect(360+25*(j-5),435,20,20);
            g.setColor(Color.DARK_GRAY);
            g.drawRect(360+25*(j-5),435,20,20);
            g.setColor(new Color(150,0,0));
            if (colorRecord[currentArrayItem] == j + 1) g.drawRect(359+25*(j-5),434,22,22);

         }

      }

      public void clearScreen(Graphics g) {

         g.setColor(Color.BLACK);
         g.setFont(new Font("Ariel", Font.BOLD, 10));
         g.drawString("CLEAR SCREEN", 380, 475);
         g.setColor(Color.DARK_GRAY);
         g.drawRect(370,462,100,18);

      }

      public void copyright(Graphics g) {

         g.setColor(Color.BLACK);
         g.setFont(new Font("TimesRoman", Font.PLAIN, 14));
         g.drawString("\u00A9", 145, 490);
         g.setFont(new Font("Courier", Font.PLAIN, 12));
         g.drawString("2011 by Dilip Muthukrishnan", 160, 490);

      }

      public void paintComponent(Graphics g) {

         super.paintComponent(g);

         for (int i = 0; i <= currentArrayItem; i++) {

            if (colorRecord[i] != 0) g.setColor(color[colorRecord[i]-1]);
            if (shapeRecord[i] == 1) g.drawRect(xRecord[i],yRecord[i],wRecord[i],hRecord[i]);
            if (shapeRecord[i] == 2) g.fillRect(xRecord[i],yRecord[i],wRecord[i],hRecord[i]);
            if (shapeRecord[i] == 3) g.fillOval(xRecord[i],yRecord[i],wRecord[i],hRecord[i]);
            if (shapeRecord[i] == 4) g.drawOval(xRecord[i],yRecord[i],wRecord[i],hRecord[i]);

            if (shapeRecord[i] == 5) {

               g.setFont(new Font("Courier", Font.BOLD, 25));
               g.drawString("DILIP",xRecord[i],yRecord[i]);

            }

         }

         if (maxReached) {

            g.setColor(Color.BLACK);
            g.setFont(new Font("Ariel", Font.PLAIN, 12));
            g.drawString("You have reached the limit!",280,15);
            g.drawString("Please clear the screen to continue.",280,30);

         }

         toolPanel(g);
         shapeTools(g);
         colorTools(g);
         clearScreen(g);
         copyright(g);

      }

   }

   public static class ShapeDrawerMouse implements MouseListener, MouseMotionListener {

      public void mousePressed(MouseEvent e) {

         ShapeDrawerPanel source = (ShapeDrawerPanel) e.getSource();

         if ((e.getX() > 20 && e.getX() < 55) && (e.getY() > 410 && e.getY() < 430)) {

            source.shapeRecord[source.currentArrayItem] = 1;
            source.repaint();

         }

         if ((e.getX() > 65 && e.getX() < 100) && (e.getY() > 410 && e.getY() < 430)) {

            source.shapeRecord[source.currentArrayItem] = 2;
            source.repaint();

         }

         if ((e.getX() > 20 && e.getX() < 55) && (e.getY() > 435 && e.getY() < 455)) {

            source.shapeRecord[source.currentArrayItem] = 3;
            source.repaint();

         }

         if ((e.getX() > 65 && e.getX() < 100) && (e.getY() > 435 && e.getY() < 455)) {

            source.shapeRecord[source.currentArrayItem] = 4;
            source.repaint();

         }

         if ((e.getX() > 20 && e.getX() < 100) && (e.getY() > 460 && e.getY() < 480)) {

            source.shapeRecord[source.currentArrayItem] = 5;
            source.repaint();

         }

         for (int j = 0; j <= 4; j++) {

            if ((e.getX() > 360+25*j && e.getX() < 380+25*j) && (e.getY() > 410 && e.getY() < 430)) {

               source.colorRecord[source.currentArrayItem] = j + 1;
               source.repaint();

            }

         }

         for (int j = 5; j <= 9; j++) {

            if ((e.getX() > 360+25*(j-5) && e.getX() < 380+25*(j-5))
                                         && (e.getY() > 435 && e.getY() < 455)) {

               source.colorRecord[source.currentArrayItem] = j + 1;
               source.repaint();

            }

         }

         if ((e.getX() > 370 && e.getX() < 470) && (e.getY() > 462 && e.getY() < 480)) {

            for (int i = 0; i <= source.currentArrayItem; i++) {

               source.shapeRecord[i] = 0;
               source.colorRecord[i] = 0;
               source.wRecord[i] = 0;
               source.hRecord[i] = 0;
               source.xRecord[i] = 0;
               source.yRecord[i] = 0;

            }

            source.currentArrayItem = 0;
            source.maxReached = false;
            source.repaint();

         }

         if ((e.getX() > 0 && e.getX() < 500) && (e.getY() > 0 && e.getY() < 400)) {

            if (source.shapeRecord[source.currentArrayItem] != 0 &&
                source.colorRecord[source.currentArrayItem] != 0) {

               source.xRecord[source.currentArrayItem] = e.getX();
               source.yRecord[source.currentArrayItem] = e.getY();

               if (source.shapeRecord[source.currentArrayItem] != 5) source.drawingMode = true;

               source.repaint();

            }

         }

      }

      public void mouseReleased(MouseEvent e) {

         ShapeDrawerPanel source = (ShapeDrawerPanel) e.getSource();

         if ((source.drawingMode && source.wRecord[source.currentArrayItem] > 0
                                 && source.hRecord[source.currentArrayItem] > 0) ||
            (!source.drawingMode && source.shapeRecord[source.currentArrayItem] == 5
                                 && sourcexRecord[source.currentArrayItem] != 0
                                 && source.yRecord[source.currentArrayItem] != 0)) {

            source.drawingMode = false;

            if (source.currentArrayItem < 19) {

               source.repaint();
               source.currentArrayItem++;

            }

            else {

               source.maxReached = true;
               source.shapeRecord[source.currentArrayItem] = 0;
               source.colorRecord[source.currentArrayItem] = 0;
               source.repaint();

            }

         }

      }

      public void mouseClicked(MouseEvent e) {}
      public void mouseEntered(MouseEvent e) {}
      public void mouseExited(MouseEvent e) {}

      public void mouseDragged(MouseEvent e) {

         ShapeDrawerPanel source = (ShapeDrawerPanel) e.getSource();

         if (source.drawingMode) {

            source.wRecord[source.currentArrayItem] = e.getX() - source.xRecord[source.currentArrayItem];
            source.hRecord[source.currentArrayItem] = e.getY() - source.yRecord[source.currentArrayItem];
            source.repaint();

         }

      }

      public void mouseMoved(MouseEvent e) {}

   }

   public static void main(String[] args) {

      ShapeDrawerMouse listener = new ShapeDrawerMouse();

      ShapeDrawerPanel myPanel = new ShapeDrawerPanel();
      myPanel.setBackground(Color.WHITE);
      myPanel.addMouseListener(listener);
      myPanel.addMouseMotionListener(listener);

      JFrame myFrame = new JFrame("Shape Drawer");
      myFrame.add(myPanel);
      myFrame.setLocation(100,100);
      myFrame.setSize(516,538);
      myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      myFrame.setVisible(true);

   }


}