//  Scott DeRuiter        3/10/2003
//  Paint.java
//  Paint some figures using MouseListener and MouseMotionListener
//	3/13/2013 Greenstein: changed applet to JFrame


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

public class Paint 
{

	private JFrame frame;
	private DrawingArea canvas;
	
	public static void main(String[] args) 
	{
		Paint p = new Paint();
		p.Run();
	}

	public void Run() 
	{
		// Create a frame to hold everything
		frame = new JFrame ("Paint");
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//frame.setBackground(Color.black);	// only needed if frame is larger than panel
		
		// Define panel to draw on
		canvas = new DrawingArea();		// create a panel to draw on
      	canvas.setBackground(Color.lightGray);
		frame.addMouseListener(canvas);	// connects the MouseListerner to the panel window
		
		// Put frame together
		frame.getContentPane().add(canvas);	// puts panel on frame
		frame.setVisible(true);
	}
}

class DrawingArea extends JPanel implements MouseListener, MouseMotionListener  
{

	private int x, y;
	private int interiorcolor, exteriorcolor, shape, size;
	private boolean initialdraw, freetodraw;

	public DrawingArea ( )   
	{
		x = y = interiorcolor = exteriorcolor = shape = size = 0;
		initialdraw = freetodraw = true;
		setBackground(Color.white);
		addMouseListener(this);
		addMouseMotionListener(this);
	}

    public void paintComponent(Graphics g) 
	{
		if ( initialdraw == true )   
		{
			super.paintComponent(g);
			initialdraw = false;
		}
		if ( freetodraw )
			DrawFigure ( g, x, y, shape );
		DrawPanels ( g );
		DrawHighlights ( g );
	}

	public void DrawPanels ( Graphics g )   
	{
		g.setColor ( Color.white );
		g.fillRect ( 0, 0, 60, 720 );
		g.fillRect ( 660, 0, 60, 720 );

		g.setColor ( Color.gray );
		g.fillRect ( 0, 0, 60, 60 );
		g.setColor ( Color.green );
		g.fillRect ( 0, 60, 60, 60 );
		g.setColor ( Color.blue );
		g.fillRect ( 0, 120, 60, 60 );
		g.setColor ( Color.cyan );
		g.fillRect ( 0, 180, 60, 60 );
		g.setColor ( Color.magenta );
		g.fillRect ( 0, 240, 60, 60 );
		g.setColor ( Color.yellow );
		g.fillRect ( 660, 0, 60, 60 );
		g.setColor ( Color.black );
		g.fillRect ( 660, 60, 60, 60 );
		g.setColor ( Color.darkGray );
		g.fillRect ( 660, 120, 60, 60 );
		g.setColor ( Color.lightGray );
		g.fillRect ( 660, 180, 60, 60 );
		g.setColor ( Color.black );
		g.drawString ( "LARGE", 11, 335 );
		g.drawString ( "MEDIUM", 8, 395 );
		g.drawString ( "SMALL", 12, 455 );

		DrawFigure ( g, 690, 270, 0 );
		DrawFigure ( g, 690, 330, 1 );
		DrawFigure ( g, 690, 390, 2 );
		DrawFigure ( g, 690, 450, 3 );

		g.drawRect ( 0, 0, 720, 480 );
		for ( int i = 0; i < 8; i++ )   
		{
			g.drawRect ( 0, i * 60, 60, 60 );
			g.drawRect ( 660, i * 60, 60, 60 );
		}
	}

	public void DrawHighlights ( Graphics g )   
	{
		g.setColor ( Color.red );
		g.drawRect ( 0, interiorcolor * 60 + 0, 60 - 0, 60 - 0 );
       		g.drawRect ( 1, interiorcolor * 60 + 1, 60 - 2, 60 - 2 );
        	g.drawRect ( 2, interiorcolor * 60 + 2, 60 - 4, 60 - 4 );
	
		g.drawRect ( 660, exteriorcolor * 60 + 0, 60 - 0, 60 - 0 );
       	  	g.drawRect ( 661, exteriorcolor * 60 + 1, 60 - 2, 60 - 2 );
        	g.drawRect ( 662, exteriorcolor * 60 + 2, 60 - 4, 60 - 4 );

		g.drawRect ( 0, size * 60 + 300, 60 - 0, 60 - 0 );
        	g.drawRect ( 1, size * 60 + 301, 60 - 2, 60 - 2 );
         	g.drawRect ( 2, size * 60 + 302, 60 - 4, 60 - 4 );

		g.drawRect ( 660, shape * 60 + 240, 60 - 0, 60 - 0 );
         	g.drawRect ( 661, shape * 60 + 241, 60 - 2, 60 - 2 );
         	g.drawRect ( 662, shape * 60 + 242, 60 - 4, 60 - 4 );
	}

	public void DrawFigure ( Graphics g, int x, int y, int shape )   
	{
		int sizer = 0;
		switch ( size )   
		{
			case 0:    sizer = 20;    break;
			case 1:    sizer = 12;    break;
			case 2:    sizer = 6;    break;
		}
		switch ( interiorcolor )   
		{
			case 0:		g.setColor ( Color.gray );     break;
			case 1:		g.setColor ( Color.green );     break;
			case 2:		g.setColor ( Color.blue );     break;
			case 3:		g.setColor ( Color.cyan );     break;
			case 4:		g.setColor ( Color.magenta );     break;
		}
		switch ( shape )   
		{
			case 0:     g.fillOval ( x - sizer, y - sizer, 2 * sizer, 2 * sizer );    break;
			case 1:     g.fillOval ( x - sizer, y - sizer / 2, 2 * sizer, sizer );    break;
			case 2:     g.fillRect ( x - sizer, y - sizer, 2 * sizer, 2 * sizer );    break;
			case 3:     g.fillRect ( x - sizer, y - sizer / 2, 2 * sizer, sizer );    break;
		}
		switch ( exteriorcolor )   
		{
			case 0:		g.setColor ( Color.yellow );     break;
			case 1:		g.setColor ( Color.black );     break;
			case 2:		g.setColor ( Color.darkGray );     break;
			case 3:		g.setColor ( Color.lightGray );     break;
		}
		switch ( shape )   
		{
			case 0:     g.drawOval ( x - sizer, y - sizer, 2 * sizer, 2 * sizer );    break;
			case 1:     g.drawOval ( x - sizer, y - sizer / 2, 2 * sizer, sizer );    break;
			case 2:     g.drawRect ( x - sizer, y - sizer, 2 * sizer, 2 * sizer );    break;
			case 3:     g.drawRect ( x - sizer, y - sizer / 2, 2 * sizer, sizer );    break;
		}
		g.setColor ( Color.black );
	}

	public void mousePressed(MouseEvent evt) 
	{
		x = evt.getX ( );
		y = evt.getY ( );         
		if ( evt.isShiftDown() ) 
		{
			initialdraw = true;
			freetodraw = false;
         		repaint();
                	return;
        }

		int ychoice = y / 60;
		if ( x <= 60 )   
		{
			freetodraw = false;
			switch ( ychoice )   
			{
				case 0:     interiorcolor = 0;     break;
				case 1:     interiorcolor = 1;     break;     
				case 2:     interiorcolor = 2;     break;     
				case 3:     interiorcolor = 3;     break;     
				case 4:     interiorcolor = 4;     break;    
				case 5:     size = 0;              break;
				case 6:     size = 1;              break;     
				case 7:     size = 2;              break;     
			}
		}
		else if ( x >= 660 )  
		{
			freetodraw = false;
			switch ( ychoice )   
			{
				case 0:     exteriorcolor = 0;     break;
				case 1:     exteriorcolor = 1;     break;     
				case 2:     exteriorcolor = 2;     break;     
				case 3:     exteriorcolor = 3;     break;     
				case 4:     shape = 0;             break;
				case 5:     shape = 1;             break;     
				case 6:     shape = 2;             break;     
				case 7:     shape = 3;             break;     
			}
		}
		repaint ( );
	}

	public void mouseReleased(MouseEvent evt) 
	{
		freetodraw = true; 
	}

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

	public void mouseMoved(MouseEvent evt) { }
	public void mouseDragged(MouseEvent evt) 
	{ 
		x = evt.getX ( );
		y = evt.getY ( );
		if ( freetodraw )
			repaint ( );
	}
}

Back to Lesson 25 Examples

Back to Java Main Page