//////////////////////////////////////////////////////////////////////////////////// // Title: A drawing program // Filename: DrawingApplet.java // // Description: Draws lines, squares and circles // // Input: Users mouse movements // Output: Picture on screen // Process: Draws appropriate image // // Written by: ... Date: ... //////////////////////////////////////////////////////////////////////////////////// import java.awt.*; // Include the graphics package import java.applet.*; // and the applet package public class DrawingApplet extends Applet { public static final int MAX_OBJECTS = 100; Button circleButton, lineButton, rectangleButton, clearButton; Canvas drawingCanvas; Label actionChosen, promptUser; int shapeChosen; boolean firstCoord; int numObjects = 0; Object figureArray [ ] = new Object [ MAX_OBJECTS ]; int figType [ ] = new int [ MAX_OBJECTS ]; public void init ( ) { circleButton = new Button ( " Circle " ); lineButton = new Button ( " Line " ); rectangleButton = new Button ( " Rectangle " ); clearButton = new Button ( " Clear " ); // drawingCanvas = new Canvas ( ); actionChosen = new Label ( "Figure chosen: none; " ); promptUser = new Label ( "Click on a button " ); // drawingCanvas.resize ( 500, 500 ); add ( circleButton ); add ( lineButton ); add ( rectangleButton ); add ( clearButton ); // add ( drawingCanvas ); add ( actionChosen ); add ( promptUser ); shapeChosen = 0; } public void paint ( Graphics g ) { int i; Object curObj; g.setColor ( Color.black ); g.fillRect ( 0, 0, this.size ( ).width - 1, this.size ( ).height - 1); g.setColor ( Color.red ); g.drawRect ( 1, 1, this.size ( ).width - 2, this.size ( ).height - 2); for ( i = 0; i < numObjects; i ++ ) { curObj = figureArray [ i ]; switch ( figType [ i ] ) { case 1: ( ( CircleFig ) curObj ).display ( g ); break; case 2: ( ( LineFig ) curObj ).display ( g ); break; case 3: ( ( RectangleFig ) curObj ).display ( g ); break; } } } public boolean handleEvent ( Event e ) { Object curFig = new Object ( ); if ( e.id == Event.ACTION_EVENT ) { if ( e.target == circleButton ){ shapeChosen = 1; figureArray [ numObjects ] = new CircleFig ( ); actionChosen.setText ( "Figure chosen: Circle; " ); promptUser.setText ( "Click for Center" ); figType [ numObjects ] = 1; firstCoord = true; numObjects = numObjects + 1; } else if ( e.target == lineButton ){ shapeChosen = 2; figureArray [ numObjects ] = new LineFig ( ); actionChosen.setText ( "Figure chosen: Line; " ); promptUser.setText ( "Click for first point" ); figType [ numObjects ] = 2; firstCoord = true; numObjects = numObjects + 1; } else if ( e.target == rectangleButton ){ shapeChosen = 3; figureArray [ numObjects ] = new RectangleFig ( ); actionChosen.setText ( "Figure chosen: Rectangle; " ); promptUser.setText ( "Click for top left" ); figType [ numObjects ] = 3; firstCoord = true; numObjects = numObjects + 1; } else if ( e.target == clearButton ) { numObjects = 0; repaint ( ); } return false; } if ( numObjects > 0 ) curFig = figureArray [ numObjects - 1 ]; // if ( e.id == Event.MOUSE_DOWN && e.target == drawingCanvas ) if ( e.id == Event.MOUSE_DOWN ) switch ( shapeChosen ) { case 1: if ( firstCoord ) { ( ( CircleFig ) curFig ).setCenter ( e.x, e.y ); firstCoord = false; promptUser.setText ( "Click for perimeter" ); } else { ( ( CircleFig ) curFig ).setPerimeter ( e.x, e.y ); shapeChosen = 0; actionChosen.setText ( "Figure chosen: none; " ); promptUser.setText ( "Click on a button" ); repaint ( ); } break; case 2: if ( firstCoord ) { ( ( LineFig ) curFig ).setStart ( e.x, e.y ); firstCoord = false; promptUser.setText ( "Click for second point" ); } else { ( ( LineFig ) curFig ).setEnd ( e.x, e.y ); shapeChosen = 0; actionChosen.setText ( "Figure chosen: none; " ); promptUser.setText ( "Click on a button" ); repaint ( ); } break; case 3: if ( firstCoord ) { ( ( RectangleFig ) curFig ).setTopLeft ( e.x, e.y ); firstCoord = false; promptUser.setText ( "Click for bottom right" ); } else { ( ( RectangleFig ) curFig ).setBottomRight ( e.x, e.y ); shapeChosen = 0; actionChosen.setText ( "Figure chosen: none; " ); promptUser.setText ( "Click on a button" ); repaint ( ); } break; } return false; } } class CircleFig { int centerX, centerY, radius; Color objColor; public void setCenter ( int x, int y ) { centerX = x; centerY = y; } public void setPerimeter ( int x, int y ) { radius = ( int ) Math.sqrt ( ( double ) ( ( x - centerX ) * ( x - centerX ) + ( y - centerY ) * ( y - centerY ) ) ); } public void display ( Graphics g ) { g.drawOval ( centerX - radius, centerY - radius, 2 * radius, 2 * radius ); } } class LineFig { int startX, startY, endX, endY; Color objColor; public void setStart ( int x, int y ) { startX = x; startY = y; } public void setEnd ( int x, int y ) { endX = x; endY = y; } public void display ( Graphics g ) { g.drawLine ( startX, startY, endX, endY ); } } class RectangleFig { int startX, startY, endX, endY; Color objColor; public void setTopLeft ( int x, int y ) { startX = x; startY = y; } public void setBottomRight ( int x, int y ) { endX = x; endY = y; if ( startX >= endX ) { int temp = startX; startX = endX; endX = temp; } if ( startY >= endY ) { int temp = startY; startY = endY; endY = temp; } } public void display ( Graphics g ) { g.drawRect ( startX, startY, endX - startX, endY - startY ); } }