// PaintJPanel.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class PaintJPanel extends JPanel
{
// ArrayList to hold the shapes
private ArrayList shapesArrayList = new ArrayList();
// currently selected shape type
private String currentType = "Line";
// currently selected color
private Color currentColor = new Color(204,204,204);
// no-argument constructor
public PaintJPanel()
{
addMouseListener(
new MouseAdapter() // anonymous inner class
{
// event handler called when mouse button is pressed
public void mousePressed( MouseEvent event )
{
paintJPanelMousePressed( event );
}
} // end anonymous inner class
); // end call to addMouseListener
addMouseMotionListener(
new MouseMotionAdapter() // anonymous inner class
{
// event handler called when the mouse is dragged
public void mouseDragged( MouseEvent event )
{
paintJPanelMouseDragged( event );
}
}// end anonymous inner class
);// end call to addMouseMotionListener
}// end constructor
// change the current shape type
public void setCurrentShapeType( String shape )
{
currentType = shape;
}// end method setCurrentShapeType
// change the current color
public void setCurrentColor( Color shapeColor )
{
currentColor = shapeColor;
}
// end method setCurrentColor
// create a new shape
public void paintJPanelMousePressed( MouseEvent event )
{
// user selected line
if( currentType.equals("Line") )
{
currentShape = new MyLine( event.getX(), event.getY(),event.getX(), event.getY(), currentColor );
}
// user selected rectangle
else if( currentType.equals("Rectangle") )
{
currentShape = new MyRectangle( event.getX(), event.getY(),event.getX(), event.getY(), currentColor );
}
// user selected oval
else if( currentType.equals("Oval") )
{
currentShape = new MyOval( event.getX(), event.getY(),event.getX(), event.getY(), currentColor );
}
shapesArrayList.add( currentShape );
}
// end method paintJPanelMousePressed
// reset the second point for the shape
public void paintJPanelMouseDragged( MouseEvent event )
{
currentShape.setX2( event.getX() );
currentShape.setY2( event.getY() );
repaint();
}
// paint all the shapes
public void paintComponent( Graphics g )
{
super.paintComponent( g );
MyShape nextShape;
Iterator shapesIterator = shapesArrayList.iterator();
// iterate through all the shapes
while( shapesIterator.hasNext() )
{
// draw each shape
nextShape = ( MyShape ) shapesIterator.next();
nextShape.draw( g );
} // end method paintComponent
} // end class PaintJPanel