For the next few assignments, we will build up a traffic control system or similar type of interactive simulation or game, step by step. You can choose what to simulate and design the rules of the simulation, its graphic design, commands, and operations any way you like, as long as they follow the general requirements described in the assignments.
The simulation consists of a number of "vehicles" moving around on a "map" or background area. The vehicles could be cars and trucks, ships, Tufts shuttle buses, planetary explorer satellites, or anything you prefer. You can choose a project that is relevant/interesting to you, because you will be working on the same project for the next several assignments. You can choose any application that satisfies the technical requirements in each assignment (buttons, animation, picking, etc).
Your program display might look like a highway or railroad network with cars and trucks travelling along the roads or tracks, a ship radar display with other ships moving around the water, an air traffic control console, or a hypothetical system for keeping track of a set of satellites. It will have a display like a map or radar screen, showing the vehicles moving around and various pushbuttons and other controls to interact with the simulation and control the vehicles. Eventually, we will provide widgets for the user to interact with the map as a whole as well as to create, modify, and delete individual vehicles on it.
For this assignment, write a Java/Swing application program that creates a window with some of the main elements you will need for this project. It should contain a drawing area and one or more control panel area with some buttons, scrollbars, or other widgets for the functions you might want in your final program. It should provide a reasonable layout for the window and its elements.
The first step, obviously, is to decide on what your application will be -- ships, planes, trains, space stations, asteroid explorers, or whatever you like.
Each button should have an appropriate label. Give your widgets plausible-sounding names for features your simulation might have. As in Assignment 1, when the user presses a button, your program should print a different message for each of the buttons. Similarly, other widgets should print messages when they are used.
In addition, at least one widget should cause a change to something that is drawn in the drawing area. It does so by modifying some instance variable data that you maintain and that your paintComponent routine uses when it draws. Then you must call repaint() on the panel to cause your changes be displayed.
This is the section of your window where the main action will eventually occur. For this assignment, create a drawing area widget, which will consume a significant part of your main window. (This object can be similar to the MyCanvas object used in lecture examples and it can subclass JPanel.) Inside this drawing area, draw some shapes, perhaps to represent your vehicles, landscape features, or grid markings.
Be sure to do all your drawing in your paintComponent() callback so that your drawing area can redraw itself when the system tells it to do so, usually because the window was exposed or resized. You can test this by resizing your window.
Once this program is running, it will simply display your objects, redrawing it as necessary if the window is resized or exposed, and responding to the buttons and other widgets.
The window should close and the application should quit when a user clicks on the close icon (the "X" or red dot in the top corner of the window title bar).
You should probably choose a BorderLayout for the main window, as in our Layout1 example. You can experiment with various ways of arranging the subcomponents to find one you think works best. Typically you would put the drawing area in the center, and the buttons and other items in some of the border areas.
(Note that if you use a FlowLayout instead, then to set the size of your drawing area you may need to use:
setPreferredSize (new Dimension (width, height))
rather than: setSize (width, height).
Your program design should exploit the features of object-oriented programming (encapsulation of code and data, support for abstract data types, polymorphism/overloading, inheritance).
You should follow these general Java programming practices:
And, finally, on your Java programs, for uniformity, please
name your Java class that has your main program in it
Main, in file
In addition to your program, submit documentation about the design of your system in these forms:
ownwhich other objects)
Submit this documentation electronically in text form. Include it as part of the readme file that you submit with your assignment.
These diagrams may be trivial for this assignment, but will become
more interesting with later assignments.