Select a Chapter: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Back to the Main Page
Chapter Eight listings: 8 classes
import javax.swing.JApplet;
import java.awt.*; // import Graphics, Graphics2D, and Color

public class Dancer extends JApplet
{
/** Illustration: Draw things on the applet's drawing area. */

public void paint (Graphics g)
{ Graphics2D page = (Graphics2D) g; // 1
page.setColor (Color.blue); // 2
page.drawString ("stars goes here", 10, 45); // 3
page.setColor (Color.red); // 4
page.drawString ("stripes go here", 10, 90); // 5
page.drawLine (10, 60, 30, 70); // 6
} //======================
}

import javax.swing.JApplet;
import java.awt.*; // import Graphics, Graphics2D, and Rectangle

public class Boxes extends JApplet
{
/** Illustration: Draw 3 boxes on the applet's drawing area. */

public void paint (Graphics g)
{ Graphics2D page = (Graphics2D) g;
Rectangle box = new Rectangle (50, 40);
box.setLocation (30, 60);
page.draw (box); // the inner box in the figure
box.grow (5, 5);
page.draw (box); // the outer box in the figure
box.translate (70, 0);
page.fill (box); // the filled box on the right
} //=======================
}

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

public class Dancer extends JApplet
{
private Flag itsFlag = new Flag();


public void start()
{ // leave empty for now; animation comes later
} //=======================


public void paint (Graphics g)
{ itsFlag.draw ((Graphics2D) g, 10, 20);
} //=======================
}

import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.Rectangle;

public class Flag
{
public static final int FLAG_WIDE = 173;
public static final int FLAG_TALL = 91;
public static final int UNION_WIDE = 69;
public static final int UNION_TALL = 49;
public static final int PIP = 2;
public static final int STAR = 5;
////////////////////////////////////
private Rectangle itsUnion = new Rectangle
(UNION_WIDE, UNION_TALL); // width & height
private Rectangle itsStripe = new Rectangle
(FLAG_WIDE, FLAG_TALL / 13);


/** Draw one American flag. */

public void draw (Graphics2D page, int x, int y)
{ drawStripes (page, x, y);
page.setColor (Color.blue);
itsUnion.setLocation (x, y);
page.fill (itsUnion);
drawAllStars (page, x, y);
} //======================


/** Draw 13 stripes in 173x91 area, top-left at (x,y). */

private void drawStripes (Graphics2D page, int x, int y)
{ itsStripe.setLocation (x, y);
for (int k = 0; k < 13; k++)
{ if (k % 2 == 0)
page.setColor (Color.red);
else
page.setColor (Color.white);
page.fill (itsStripe);
itsStripe.translate (0, TALL);
}
} //======================


/** Draw the 50 stars on the flag whose union is at (x,y). */

private void drawAllStars (Graphics2D page, int x, int y)
{ page.setColor (Color.white);
for (int row = 0; row < 9; row++)
{ int end = row % 2 == 0 ? x + PIP : x + PIP + 6;
drawRowOfStars (page, x + UNION_WIDE - STAR, end,
y + PIP + row * STAR);
}
} //======================


/** Draw one row of 5 or 6 stars on the union. */

private void drawRowOfStars (Graphics2D page, int end,
int x, int y)
{ for (; x < end; x += 12)
drawOneStar (page, x, y);
} //======================


/** Draw 1 star with bounding box at position (x,y). */

private void drawOneStar (Graphics2D page, int x, int y)
{ int twoPips = PIP * 2;
page.drawLine (x + PIP, y, x, y + twoPips);
page.drawLine (x, y + twoPips, x + twoPips, y + PIP);
page.drawLine (x + twoPips, y + PIP, x, y + PIP);
page.drawLine (x, y + PIP, x + twoPips, y + twoPips);
page.drawLine (x + twoPips, y + twoPips, x + PIP, y);
} //======================
}

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

public class Dancer extends JApplet
{
private Flag itsFlag = new Flag();
private int itsLeftEdge;
private int itsTopEdge;


public void start()
{ setVisible (true);
for (int count = 0; count < 2; count++)
{ danceRight();
danceLeft();
}
} //======================

private void danceRight()
{ itsTopEdge = 20;
for (itsLeftEdge = 10; itsLeftEdge <= 49; itsLeftEdge++)
{ repaint();
pause (50);
itsTopEdge += (itsLeftEdge / 10 % 2 == 1) ? 4 : -4;
}
} //======================

private void danceLeft()
{ itsTopEdge = 20;
for (itsLeftEdge = 49; itsLeftEdge >= 10; itsLeftEdge--)
{ repaint();
pause (50);
itsTopEdge += (itsLeftEdge / 10 % 2 == 1) ? -4 : 4;
}
} //======================

private static void pause (int wait)
{ long timeToQuit = System.currentTimeMillis() + wait;
while (System.currentTimeMillis() < timeToQuit)
{ } // take no action
} //======================

public void paint (Graphics g)
{ Graphics2D page = (Graphics2D) g;
page.setColor (Color.white);
page.fillRect (0, 0, 320, 160); // clear the area
itsFlag.draw (page, itsLeftEdge, itsTopEdge);
} //======================
}

import java.awt.*;

public class Collision extends javax.swing.JApplet
{
public static final int NUM_CYCLES = 4000;
public static final int SIZE = 21; // number of Balls
//////////////////////////////////
private Ball[] itsItem = new Ball [SIZE]; // the 21 Balls


/** Draw the display of 21 balls several thousand times. */

public void start()
{ this.setVisible (true);
Ball.initialize (this.getWidth(), this.getHeight());
for (int k = 0; k < SIZE; k++)
itsItem[k] = new Ball();
for (int cycle = 1; cycle <= NUM_CYCLES; cycle++)
{ updateEachBall();
repaint();
long timeToQuit = System.currentTimeMillis() + 90;
while (System.currentTimeMillis() < timeToQuit)
{ } // take no action
}
} //======================


/** Check each ball and make the appropriate changes. */

private void updateEachBall()
{ for (int k = 0; k < SIZE; k++)
{ if (itsItem[k].isHealthy())
moveAndCheckHits (itsItem[k]);
else if (itsItem[k].isDying())
itsItem[k].deteriorates();
else
itsItem[k] = new Ball();
}
} //======================


/** Poison any 1 ball that guy comes very close to. */

private void moveAndCheckHits (Ball guy)
{ guy.move();
int c = 0;
while (c < SIZE && itsItem[c].misses (guy))
c++;
if (c < SIZE && itsItem[c].isHealthy())
itsItem[c].getsPoison();
} //======================


/** Draw the current status of the 21 balls. */

public void paint (Graphics g)
{ Graphics2D page = (Graphics2D) g;
page.setColor (Color.white);
page.fill (new Rectangle (getWidth(), getHeight()));
for (int k = 0; k < SIZE; k++)
itsItem[k].drawImage (page);
} //======================
}

import java.util.Random;
import java.awt.geom.Ellipse2D;
import java.awt.*;

public class Ball
{
public static final int UNIT = 15; // width of figure
private static final int HEALTHY = 100; // cycles to languish
private static Random randy = new Random();
private static int theRight; // right side of the screen
private static int theBottom; // bottom edge of the screen
//////////////////////////////////
private int itsXspot; // x-value of current location
private int itsYspot; // y-value of current location
private int itsXmove; // change in x each cycle
private int itsYmove; // change in y each cycle
private int itsStatus; // tells how healthy it is


public static void initialize (int rightSide, int bottom)
{ theRight = rightSide;
theBottom = bottom;
} //======================


public Ball()
{ itsXspot = (theRight * (1 + randy.nextInt (9))) / 10;
itsYspot = theBottom - randy.nextInt (40);
itsXmove = randy.nextInt (5) - 2; // range -2 to 2
itsYmove = randy.nextInt (3) - 3; // range -1 to -3
itsStatus = HEALTHY;
} //======================


public boolean isHealthy()
{ return itsStatus == HEALTHY;
} //======================


public void getsPoison()
{ itsStatus = HEALTHY - 1;
} //======================


public boolean isDying()
{ return itsStatus < HEALTHY && itsStatus > 0;
} //======================


public void deteriorates()
{ itsStatus--;
} //======================


// the Ball class, completed

public void move()
{ itsXspot += itsXmove;
itsYspot += itsYmove;
if (itsXspot <= 1 || itsXspot >= theRight - UNIT)
itsXmove = - itsXmove;
if (itsYspot <= 1 || itsYspot >= theBottom - UNIT)
itsYmove = - itsYmove;
} //======================


public boolean misses (Ball guy)
{ return this == guy || Math.abs (itsXspot - guy.itsXspot)
+ Math.abs (itsYspot - guy.itsYspot) > 2;
} //======================


public void drawImage (Graphics2D page)
{ if (isHealthy())
page.setColor (Color.red);
else
page.setColor (Color.blue);
page.fillOval (itsXspot, itsYspot, UNIT, UNIT);
} //======================
}

import java.awt.Color;


public class Turtlet
{ public static final double DEGREE = Math.PI / 180;
public static final Color RED = Color.red, BLUE = Color.blue,
BLACK = Color.black, GRAY = Color.gray,
YELLOW = Color.yellow, PINK = Color.pink,
ORANGE = Color.orange, GREEN = Color.green,
MAGENTA = Color.magenta, WHITE = Color.white;
private static java.awt.Graphics thePage;
//////////////////////////////////
private double heading = 0; // heading initially east
private double xcor, ycor; // current position of Turtle


/** Set the drawing Color to the given value. Made an instance method
* only so that it cannot be called until thePage is assigned, although
* the drawing color is a property of thePage, not of one Turtle. */

public void switchTo (Color given)
{ thePage.setColor (given);
} //======================


/** Write words without changing the Turtle's state. */

public void say (String message)
{ thePage.drawString (message, (int) xcor, (int) ycor);
} //======================


/** Pause the animation for wait milliseconds. Made a class method
* so that an applet can pause an animation "between turtles". */

public static void sleep (int wait)
{ try
{ Thread.sleep (wait);
}catch (InterruptedException ex)
{}
} //======================


/** Supply the nearest int value to methods requiring ints. */

private int round (double x)
{ return (int) (x + 0.5);
} //======================


/** Make a circle of the given radius, Turtle at center. */

public void swingAround (double radius)
{ if (radius > 0.0)
{ int rad = round (2 * radius);
thePage.drawOval (round (xcor - radius),
round (ycor - radius), rad, rad);
}
} //======================


// the Turtle class, completed

/** Rotate left by left degrees; MOVE for forward steps. */

public Turtle move (double left, double forward)
{ heading += left * DEGREE;
xcor += forward * Math.cos (heading);
ycor -= forward * Math.sin (heading);
return this;
} //======================


/** Rotate left by left degrees; PAINT for forward steps. */

public Turtle paint (double left, double forward)
{ heading += left * DEGREE;
double x = xcor + forward * Math.cos (heading);
double y = ycor - forward * Math.sin (heading);
page.draw (new Line2D.Double (xcor, ycor, x, y));
xcor = x;
ycor = y;
return this;
} //======================


/** Fill a circle of the given radius, Turtle at center. */

public void fillCircle (double radius)
{ page.fill (new Ellipse2D.Double (xcor - radius,
ycor - radius, 2 * radius, 2 * radius));
} //======================


/** Fill a rectangle of the given width and height,
* Turtle at center. */

public void fillBox (double width, double height)
{ page.fill (new Rectangle2D.Double (xcor - width / 2,
ycor - height / 2, width, height));
} //======================


/** Create a turtle on a given page at (xstart, ystart). */

public Turtle (Graphics g, double xstart, double ystart)
{ page = (Graphics2D) g;
xcor = xstart;
ycor = ystart;
} //======================


public Turtle()
{ if (page == null)
{ JFrame area = new JFrame ("Turtle drawings");
area.addWindowListener (new Closer()); // in Chapter 9
area.setSize (WIDTH, HEIGHT);
area.setVisible (true);
page = (Graphics2D) area.getGraphics();
area.paint (page);
page.setColor (BLACK);
}
} //======================
}

All information Copyright (c)1999 - 104 Dr. William C. Jones, Jr.
Layout and Design Copyright © Psumonix, LLC. All Rights Reserved.
Last modified Tue, 15 Jul 2003 05:08:49 GMT