There are many introductory programming assignments that involve objects in a two-dimensional data structure. They include games, like tic-tac-toe, checkers, and chess; maze programs; simulations, like Conway's Game of Life† or the AP® Marine Biology Simulation (MBS) case study‡; and simpler programs that use a grid as graph paper for drawing histograms or bit-mapped drawings. These projects lend themselves to graphical representations, but the overhead involved in implementing graphical user interfaces for such assignments, especially interfaces that support user interaction, is non-trivial. The Grid Package provides a set of simple Java classes for modeling objects in a two-dimensional grid, and provides a library of other classes that make it easy to create graphical user interfaces to display and interact with such models.
The Grid Package started out in the fall of 2002 as the Environment Package,
a refactoring of the graphical user interface provided with the AP® Marine
Biology Simulation (MBS) case study†. In
December 2003 it underwent a major revision and a name change, when
the MBS
Environment
class and Locatable
interface were dropped
as the core modeling classes at the heart of the package in favor of the current Grid
and GridObject
classes. The
reason for this change was that the Locatable
interface cannot
guarantee that objects in an environment satisfy the Environment
object
invariant that an environment and the objects in it must agree about the object
locations. The
GridObject
class not only specifies a location
method,
but also provides a changeLocation
implementation
that guarantees that the invariant is always met. Once I decided
not to stick with the Environment
and Locatable
classes
as they appear in the MBS, it became possible to make other small changes that
improve the readability, flexibility, or generality of the Grid
and GridObject
classes.
The package was revised again in the summer of 2004 with the help of Joel
Booth, a senior at Kalamazoo College. This revision included introducing
the RotatedDecorator
and ScaledImageDecorator
classes,
and moving toward customizing user interfaces using includeXYZ
methods
(e.g., includeMenu
,
includeRunButton
, etc) rather than using a myriad of constructor
parameters. The
"nuggets" and "util" classes (e.g., ClearGridButton
, ColorChoiceMenu
, BasicHelpMenu
, NamedColor
, and ValidatedInputReader
)
were also added at that time.
The package is now quite stable, although some of the documentation is still under construction. Please contact me if you find errors, have questions, or wish to make a suggestion.
Update: The package has been updated several times (2006, 2012,
2016, and 2017) to use the new for
style
introduced in Java 5, to clean up the handling of threads
(which conflicted with BlueJ), and to make other minor changes.
grid.jar
).javadoc
class documentation for all
classes in the package.javadoc
class documentation.javadoc
class documentation for all classes in the package.javadoc
class documentation for all classes in the package.grid.jar
),
the draft Overview
document and a set of examples, and the complete javadoc
documentation
for the classes in the package.javadoc
class documentation.grid.jar
), without any documentation or examples.The assignments above were developed using Eclipse and so come with
Eclipse project files already in place. They can be used, however, with
any Java compiler or IDE; the key is to know how to incorporate the
grid.jar
Java archive file into your application
under your specific compiler (analogous to handling the mbsbb.jar
and mbsgui.jar
files in the MBS case study).
+libs
folder under the folder containing the
assignment source files (e.g., JavaSourceFiles
or
src
), then move the grid.jar
file to the new
+libs
folder. Bring up BlueJ, choose "Open Non
BlueJ..." under the "File" menu, and navigate to the source folder.
After you have opened it once as a non-BlueJ application you can subsequently
open it as a BlueJ project.
You may delete the CompiledClassFiles
and
JavadocDocumentation
folders since BlueJ will generate
compiled class files and javadoc documentation under the source file
folder.
To run the examples in the main Grid Package
OverviewAndExamples
folder, you may need to pull the
various examples out of the single ExampleSourceFiles
folder into separate folders. For example, you might create an
Example1
folder, move Example1.java
there,
create a +libs
folder under the Example1
folder, move or copy the grid.jar
file into the new
+libs
folder, and then open the Example1
folder in BlueJ (initially as a non-BlueJ project). You could then create a
ColorExample
folder, move ColorExample.java
there,
copy the +libs
folder from Example1
to
ColorExample
, and then open the ColorExample
folder in BlueJ. Some examples include several
classes, not just one, that must be moved together into the new folder
created for that example.