In this lab you will work with arrays of objects.
Download the jar file: Mosaic.jar
to your csci/201 directory,
unjar the file (Help),
create a new NetBeans project called Mosaic
,
and mount the Mosaic
directory created when you unjarred the archive file (Help).
Compile the java classes Mosaic
and
Circle
.
Mosaic
is an Applet
.
Run it as an applet and view its display.
The task of Mosaic
is to
display a fixed number of randomly positioned circles,
each generated by the Circle
class.
Right now, all
circle objects are red and have the same size. That's pretty boring.
Your first task
is to modify the
Mosaic
and Circle
classes so
that the circles have a randomly selected size and color.
Let's begin by looking at the code for Mosaic
class. The
class begins with the declaration of several instance
variables, almost all declared to be static final
.
In addition to instance variables, the
Mosaic
class contains two public methods, init
and paint
, and one private method,
randomRainbowColor
. The
init
and paint
methods belong to all applets.
The
randomRainbowColor
method is presently unused.
It is included for you to use when
generating a randomly chosen color for Circle
objects.
Now let's look at the instance variables. All of these
constants are used in creating the display and their names are
indicative of their purpose. The only instance variable that is not a
constant is a collection of Circle
objects stored
in an array.
public class Mosaic extends Applet { // Number of cirles to create and display private static final int NumCircles = 50; // Size of the Applet's window private static final int WinSize = 500 ; // Minimin offset of a circle's center private static final int MinOffset = 50 ; // Amount the offset can exceed the minimin private static final int MaxOffsetGrowth = 400; // Array of circles to be drawn private Circle[] Circles = new Circle[NumCircles];
In the last declaration, we are reserving enough memory to store 50, the
value of variable NumCircles
, references to
Circle
objects. We actually create the
Circle
objects in a for
loop inside the
init
method.
for (i=0; i<NumCircles; i++) { // generate a random x and y for circle position xPosition = (int) (Math.random() * MaxOffsetGrowth) + MinOffset; yPosition = (int) (Math.random() * MaxOffsetGrowth) + MinOffset; // now create a new circle object Circles[i] = new Circle(xPosition, yPosition); }
In Mosaic
's paint
method we call each
Circle
object's draw
method to cause the object to
be rendered in the display. This is done in the following lines of code:
for(i=0; i < arraySize; i++) // call each circle's draw method Circles[i].draw(page);
The Circle
class also consists of instance variables and
three methods. As you know, the instance variables represent the
state of a Circle
object and
the methods define the object's behavior.
Two of the methods in the Circle
class are public.
They are a constructor and the draw
method. The third method,
letter2Color
, is a private method that is not currently
used. It is provided to help you establish a randomly selected color
for each circle object.
In order to create Circle
objects with varying color and varying size,
you will need to add a representation of color and size to the state
of a circle. You will also have to modify the constructor and the
draw
methods to use that representation. Be sure to make
use of the letter2Color
method in the Circle
class and the randomRainbowColor
method in the
Mosaic
class when selecting and assigning a random color to each circle
object.
Show your instructor the output of your modified program. Your display should now consist of a gray background with fifty circles, each of which has a randomly generated diameter and color.
Now add a new class to your program and use that class to enhance your
display. Create a Rectangle
class and add fifty rectangles to
your display. Each rectangle should have a randomly generated size
and position. You may randomly generate a color for each rectangle
but that is not required. Use the Circle
class as a model
for creating and using your new Rectangle
class.
Show your instructor the enhanced display created by your new program. This display should contain both circles and rectangles.