Write an applet that demonstrates your ability to take advantage of the code already written.
As an example here is one that has a lot of features.
// PaintOOP1.java // The Paint Brush Program // // This paint program has terrible OOP Design--but more on that later // We hope that you can learn that as you add tools, the complexity // will grow, and you will appretiate good OOP Design later. // // Right now there are only 2 colors and 2 draw tools to get you started, // Leon Schram's Starter uses many depricated methods to this // is my version which will compile without deprecations warnings. // // In Chapter 21 will will learn more about Interfaces, but the // Current way to get graphic input from an Applet is by Implementing // the MouseMotionListener and the MouseListener. // Basically, they are all set up for us, and we can override events // When we want to with our implemention import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class PaintOOP1 extends Applet implements MouseMotionListener, MouseListener { Rectangle paintArea, clear; ColorButton red, blue, white; PencilTool pencil; BrushTool brush; LineEffectTool lineEffect; Color currentColor; boolean firstClick, lineEffectOn; public int drawTool, tempDrawTool,xClick, yClick, startX, startY, width, height, cc; public void init() { cc = 0; drawTool = 1; tempDrawTool = 1; xClick = 97; yClick = 0; startX = 105; startY = 10; currentColor = Color.red; firstClick = true; width = getWidth(); height = getHeight(); paintArea = new Rectangle(115,15,869,569); // Pallette Button Rectengles red = new ColorButton(5,5,42,42, Color.red); blue = new ColorButton(53,5,42,42, Color.blue); white = new ColorButton(5,53,42,42, Color.white, "Erase"); clear = new Rectangle(4,340,92,55); pencil = new PencilTool(5,400,42,42, "pencil"); brush = new BrushTool(53,400,42,42, "brush"); lineEffect = new LineEffectTool(5,448,42,42); // Finally, we alter the init method to add our MouseListener and // MouseMotionListener to this Applet: addMouseMotionListener(this); // new addMouseListener(this); //new } public void paint(Graphics g) { if (cc <= 1)// Single click { g.setColor(Color.white); g.fillRect(0,0,width,height); } //Draw Color and Tool Pallette red.drawButton(g); blue.drawButton(g); white.drawButton(g); pencil.drawButton(g, currentColor); brush.drawButton(g, currentColor); lineEffect.drawButton(g, currentColor); g.drawString("Clear Screen",13,363); g.drawString("(Double-Click)",9,383); g.drawRect(clear.x, clear.y, clear.width, clear.height); // Now draw if in Paint area g.setColor(currentColor); switch (drawTool) { case 1 : //pencil if (paintArea.contains(xClick,yClick)) pencil.draw(g,xClick,yClick); break; case 2 : //brush if (paintArea.contains(xClick,yClick)) brush.draw(g, xClick,yClick); break; case 5 : //clearScreen g.setColor(Color.white); g.fillRect(paintArea.x-15,paintArea.y-5, paintArea.width+30, paintArea.height+10 ); g.setColor(currentColor); drawTool = tempDrawTool; break; case 9 : //LineEffectTool if (lineEffectOn && paintArea.contains(xClick,yClick)) lineEffect.draw(g, startX,startY,xClick,yClick); break; } } public void drawPixel(Graphics g, int x, int y) { g.drawLine(x,y,x,y); } /* * New Mouse methods * * Since we are implementing the MouseListener and MouseMotionListener with our Applet * There are some required methods we need to decalre here, even * if there is nothing to do if that mouse event occurs: */ // MOUSE MOTION LISTENER STUFF: public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} // Now we put the code in the last required method // that used to be in the old mouseDown method // in our new mouseClicked method: // The textbook like the Rectangle's inside() method // which has been depricated... simply uses the current // contains() method instead public void mouseClicked(MouseEvent e) { int x = e.getX();//new int y = e.getY();//new cc++; // click count if(red.contains(x,y)) { currentColor = red.getColor(); } else if(blue.contains(x,y)) { currentColor = blue.getColor(); } else if(white.contains(x,y)) { currentColor = white.getColor(); } else if(pencil.contains(x,y)) { drawTool = 1; lineEffectOn = false; } else if(brush.contains(x,y)) { drawTool = 2; lineEffectOn = false; } else if(clear.contains(x,y) && e.getClickCount() == 2)//double clicked on the clear button { if (drawTool != 5) tempDrawTool = drawTool; drawTool = 5; lineEffectOn = false; } else if(lineEffect.contains(x,y)) { drawTool = 9; lineEffectOn = true; } else if(paintArea.contains(x,y) && lineEffectOn) { startX = x; startY = y; } xClick = x; yClick = y; repaint(); } // MOUSE MOTION LISTENER STUFF: // this method needed of all MouseMotionListeners, // even if we don't do anything: public void mouseMoved(MouseEvent e) {} // Here we put the put the code that used to be in the mouseDrag method: public void mouseDragged(MouseEvent e) { int x = e.getX();//new int y = e.getY();//new cc+=2; // click count xClick = x; yClick = y; repaint(); } /* * End of New Mouse Methods */ public void update(Graphics g) { paint(g); } }
/** * class ColorButton. * */ import java.awt.*; public class ColorButton { // instance variables private Rectangle btn; private Color c; private String lab; /** * Constructor for objects of class ColorButton */ public ColorButton( int x, int y, int width, int length, Color c) { btn = new Rectangle (x, y, width, length); this.c=c; lab=""; } public ColorButton( int x, int y, int width, int length, Color c, String lab) { btn = new Rectangle (x, y, width, length); this.c=c; this.lab=lab; } public void drawButton(Graphics g) { g.setColor(c); g.fillRect(btn.x, btn.y, btn.width, btn.height); g.setColor(Color.black); g.drawRect(btn.x, btn.y, btn.width, btn.height); g.drawString(lab,btn.x+5, btn.y+25); } public boolean contains(int x, int y) { return btn.contains(x,y); } public Color getColor() { return c; } }
/** * class PencilTool. * */ import java.awt.*; public class PencilTool { // instance variables - private Rectangle btn; private String lab; /** * Constructor for objects of class */ public PencilTool( int x, int y, int width, int length) { btn = new Rectangle (x, y, width, length); lab=""; } public PencilTool( int x, int y, int width, int length, String lab) { btn = new Rectangle (x, y, width, length); this.lab=lab; } public void drawButton(Graphics g, Color currentColor) { g.setColor(Color.white);//erase the old color version g.fillRect(btn.x+20,btn.y+20,2,2); if (!currentColor.equals(Color.white)) { g.setColor(currentColor); g.fillRect(btn.x+20,btn.y+20,2,2); } else { g.setColor(Color.black); g.drawRect(btn.x+20,btn.y+20,2,2); } //Next draw outline and the label g.setColor(Color.black); g.drawRect(btn.x, btn.y, btn.width, btn.height); g.drawString(lab,btn.x+5, btn.y+35); } public boolean contains(int x, int y) { return btn.contains(x,y); } public void draw(Graphics g, int x, int y) { g.fillRect(x-1,y-1,3,3); } }
/** * class BrushTool. * */ import java.awt.*; public class BrushTool { // instance variables private Rectangle btn; private String lab; /** * Constructor for objects of class */ public BrushTool( int x, int y, int width, int length) { btn = new Rectangle (x, y, width, length); lab=""; } public BrushTool( int x, int y, int width, int length, String lab) { btn = new Rectangle (x, y, width, length); this.lab=lab; } public void drawButton(Graphics g, Color currentColor) { g.setColor(Color.white);//erase the old color version g.fillRect(btn.x+17,btn.y+14,8,8); if (!currentColor.equals(Color.white)) { g.setColor(currentColor); g.fillRect(btn.x+17,btn.y+14,8,8); } else { g.setColor(Color.black); g.drawRect(btn.x+17,btn.y+14,8,8); } //Next draw outline and the label g.setColor(Color.black); g.drawRect(btn.x, btn.y, btn.width, btn.height); g.drawString(lab,btn.x+5, btn.y+35); } public boolean contains(int x, int y) { return btn.contains(x,y); } public void draw(Graphics g, int x, int y) { g.fillRect(x-4,y-4,9,9); } }
/** * class LineEffectTool. * */ import java.awt.*; public class LineEffectTool { // instance variables private Rectangle btn; private String lab; /** * Constructor for objects of class */ public LineEffectTool( int x, int y, int width, int length) { btn = new Rectangle (x, y, width, length); lab=""; } public LineEffectTool( int x, int y, int width, int length, String lab) { btn = new Rectangle (x, y, width, length); this.lab=lab; } public void drawButton(Graphics g, Color currentColor) { g.setColor(Color.white);//erase the old color version g.fillRect(btn.x,btn.y,btn.width,btn.height); if (!currentColor.equals(Color.white)) { g.setColor(currentColor); } else { g.setColor(Color.black); } for (double rad = 0.5*Math.PI; rad <= 1.5*Math.PI; rad += 0.2) { int x = btn.x+17 + (int) Math.round(Math.cos(rad) * 10); int y = btn.y+24 + (int) Math.round(Math.sin(rad) * 15); g.drawLine(btn.x+37,btn.y,x,y); } //Next draw outline and the label g.setColor(Color.black); g.drawRect(btn.x, btn.y, btn.width, btn.height); g.drawString(lab,btn.x+5, btn.y+35); } public boolean contains(int x, int y) { return btn.contains(x,y); } public void draw(Graphics g, int x0, int y0, int x1, int y1) { g.drawLine(x0, y0, x1, y1); } }
Implement one or more of the features like the ones listed below. You will more for adding each one of these features for a total possible score of 11 points.