Lab 14: GUI Part II

The goal of this lab is to design windows requesting input from the user.

1. Introduction and setup

Today we go back to a simulation of the same sort as the predator-prey example. We will have a grid inhabited by agents, each acting in its own way.

The grid we'll be working with today will be inhabited by Skeets. A Skeet is an object that moves about the grid in a way determined by the following parameters:

Make a directory for this lab and copy the appropriate files from the course directory.

hg clone /cslab/class/csci235/lab14
cd lab14

Then compile and run the program Skeets. Notice that there is a jar file; you'll need to refer to it on the command line when you compile and run.

javac -cp simulation.jar:. Skeets.java
java -cp simulation.jar:. Skeets

By default there is a single Skeet. If you inspect the code in Skeets.java, you'll see that the Skeet is added to the grid in the line

model.setAgentAt(100, 100, new Skeet(100, 100, .25 * Math.PI, .125 * Math.PI,
                                     3, Color.RED, model));

Compare this with the file Skeet.java, particularly the instance variables and constructor, to understand all that this means.

The intent of this program is to allow the user to add new Skeets to the system as the simulation runs. Pressing the button Add Skeet should launch a dialog box asking the user for all the specification of the Skeet and add that Skeet to the grid. However, when you press the button, nothing happens. That's for you to write.

("Dialog box" is not meant to be a technical term; it just means a smallish window on the screen temporarily to get input from the user.)

2. The AddListener class

The Add Skeet button has an action listener attached to it. However, the actionPerformed() method is empty. Your main task is to fill in this method, which will prompt the user with a dialog box.

As you add things to the window in your program, It is a good idea to periodically compile and run the program to see how the window looks so far, and then make some adjustments. Make the window look reasonably nice; play with the dimensions and the layout until it looks right.

Here are things that ought to be in the dialog box:

The actionPerformed() method should also make the dialog box appear and it should attach another action listener to the Ok button, but that action listener will be the subject of the next part.

3. The other action listener class

Write another class, also implementing ActionListener which will react to the Ok button being pressed. Specifically, the actionPerformed() method should

First, you should think about what pieces of information this action listener needs to know (hint: a lot). These will become instance variables and parameters to the constructor. Then writing the actionPerformed() method will be easier.

4. Turn-in

Print out the files you modified.

Also, turn in those source files with a command such as

/cslab/class/csci235/bin/handin lab14 *.java

Be sure to include all of your files on a single command.


Thomas VanDrunen, Cary Gray
Last modified: Tue Nov 30 08:01:21 CST 2010