Computer Science 120
Introduction to Programming
Fall 2011, Siena College
DrawBBalls Demo
A working demo of DrawBBalls will appear below. Click inside the applet to interact with it.
DrawBBalls BlueJ Project
Click here to download a BlueJ project for DrawBBalls.
DrawBBalls Source Code
The Java source code for DrawBBalls is below. Click on a file name to download it.
import objectdraw.*; import java.awt.*; /* * Example DrawBBalls: draw basketballs on mouse dragging * * Jim Teresco, Siena College, CSIS 120, Fall 2011 * * $Id: DrawBBalls.java 1540 2011-02-15 17:50:40Z terescoj $ */ public class DrawBBalls extends WindowController { public static final double BBALL_SIZE = 50; // draw a nice basketball centered at the mouse point on each drag public void onMouseDrag(Location point) { new NiceBBall(point.getX() - BBALL_SIZE/2, point.getY() - BBALL_SIZE/2, BBALL_SIZE, canvas); } // clean up when we re-enter the window public void onMouseEnter(Location point) { canvas.clear(); } }
import objectdraw.*; import java.awt.Color; /* * A class that implements a nice looking basketball. */ public class NiceBBall { // the color to draw the ball private static final Color BALL_ORANGE = new Color(250, 85, 10); // size and starting angles for cut arc in degrees private static final int CUTSIZE = 100; private static final int RIGHTCUTSTART = 90 + (180 - CUTSIZE) / 2; private static final int LEFTCUTSTART = 270 + (180 - CUTSIZE) / 2; // the orange part of the ball private FilledOval body; // the border of the ball private FramedOval border; // the two curves on the sides of the ball private FramedArc leftCut, rightCut; // the vertical and horizontal lines through the ball private Line vert, horiz; // to pick new random color for ball private RandomIntGenerator colorPicker = new RandomIntGenerator(0,255); /* * Create a new basketball. */ public NiceBBall(double left, double top, double size, DrawingCanvas aCanvas) { // draw the circles that make it look like a ball body = new FilledOval(left, top, size, size, aCanvas); body.setColor(BALL_ORANGE); border = new FramedOval(left, top, size, size, aCanvas); // draw the lines and arcs that make it look like a basketball rightCut = new FramedArc(left + size * 2 / 3, top, size, size, RIGHTCUTSTART, CUTSIZE, aCanvas); leftCut = new FramedArc(left - size * 2 / 3, top, size, size, LEFTCUTSTART, CUTSIZE, aCanvas); vert = new Line(left + size / 2, top, left + size / 2, top + size, aCanvas); horiz = new Line(left, top + size / 2, left + size, top + size / 2, aCanvas); } /* * Move the ball by specified offsets. */ public void move(double dx, double dy) { // move each part of the ball by the offsets provided body.move(dx, dy); border.move(dx, dy); vert.move(dx, dy); horiz.move(dx, dy); leftCut.move(dx, dy); rightCut.move(dx, dy); } /* * Check to see if the ball contains a specified location. */ public boolean contains(Location point) { return body.contains(point); } /* * Move the ball to a specified position. */ public void moveTo(double x, double y) { // determine how far away (x,y) is double dx, dy; dx = x - body.getX(); dy = y - body.getY(); // move each part of the ball by the offset, // using our own move method. this.move(dx, dy); } /* * Return the x coordinate of ball's corner. */ public double getX() { return body.getX(); } /* * Return the y coordinate of ball's corner. */ public double getY() { return body.getY(); } public void changeToRandomColor() { Color newBallColor = new Color(colorPicker.nextValue(), colorPicker.nextValue(), colorPicker.nextValue()); body.setColor(newBallColor); } public void backToNormalColor() { body.setColor(BALL_ORANGE); } }