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);
}
}
|